Vue基础-安装/引入/代理/计算属性/监视

安装

通过Vue官方下载:https://v2.cn.vuejs.org/v2/guide/installation.html

配置自定义代码片段
VSCode:通过 Ctrl+Shift+P 输入 “Configure User Snippets” 创建自定义代码模板;

然后选择要定义的代码类型比如:
html.json

"script引入": {
    "prefix": "sct",
    "body": ["<script type = \"text/javascript\" src=\"\"></script>"]
}

vue.json

"vue3模板": {
    "prefix": "vue3",
    "body": ["<template>", "  <div></div>", "</template>", "", "<script setup>", "", "</script>", "", "<style scoped>", "","</style>"]
  }

vue引入

<script type = "text/javascript" src="../js/vue.js"></script>

打开浏览器会有如下警告:

Download the Vue Devtools extension for a better development experience:
https://github.com/vuejs/vue-devtools

点击https://github.com/vuejs/devtools这个地址,或者从谷歌商店直接搜索安装也可以


初识Vue
先创建一个容器:

<div id="root">
        <h1>Hello,{{name}}</h1>//Hello,vue
</div>

创建Vue实例,设置el字段与容器中的id一致,即指定当前Vue实例为哪个容器服务;
data字段用于存储数据,数据提供el所指定的容器中是使用,在容器中使用插值语法{{}}调用data中的值。

<script type="text/javascript">
     Vue.config.productionTip = false; //阻止vue在启动时生成生产提示
     const vue = new Vue({
         el: "#root",
         data: {
             name: "vue"
         }
     })
</script>

注意:Vue实例和容器之间是一对一的关系,不能一对多。

模版语法
1、插值语法 {{ }},花括号内是表达式;
2、指令语法v-bind:,可简写为: 后面字符串会当作表达式处理。

<a v-bind:href="url">点我跳转</a>
<a :href="url">点我跳转</a>

数据绑定
使用指令v-model:进行数据绑定

<input type="text" v-model:value = "name">

注意:并不是所有属性都能用v-model,因为只能用在表单类元素,例如:inputtextareaselect等。

el与data的第二种写法
前面讲到一种写法

const vue = new Vue({
    el: "#root",
    data: {
        name: "vue"
    }
})

第二种写法:

const vue = new Vue({
     data: function () {
          return {
              name: "初识vue",
              url: "https://www.baidu.com"
          }
      }
})
vue.$mount('#root')

//函数式

data() {
     return {
          name: "初识vue",
          url: "https://www.baidu.com"
      }
}

说一个插件:Vue代码提示的插件


MVVM
Model View ViewModel的简称,其中Model对应data中的数据,View是模版,ViewModelVue实例对象。

Object.defineProperty
es6中,这个方法是用于给对象添加属性,默认是不参与遍历的。
修改enumerabletrue,即可参与遍历。
writable控制属性是否可以被修改,默认值是false
configurable控制属性是否可以被删除,默认值是false

Object.defineProperty(person,"age",{
       value:18,
       enumerable:true,
       writable:true,
       configurable:true
})

其他方法:
当读取personage属性时,get函数会被触发,且返回age的值。

let number = 18
Object.defineProperty(person,"age",{
      get:function(){
          return number 
      }
      set:function(value){
         number = value
      }
})

数据代理
通过一个对象代理对另一个对象中属性的操作;
例如:通过obj2操作obj中的属性x

let obj = { x: 100 }
let obj2 = { y: 200 }
Object.defineProperty(obj2, 'x', {
     get() {
         return obj.x
     },
     set(value) {
         obj.x = value
     }
})

事件处理

methods:{
      showInfo(event) {
           console.log(event.target.innerText);//元素的内容
           console.log(this);//vue实例
          }
 }

传参时需要给event站位

<button @click="showInfo(666,$event)">点击按钮</button>

methods:{
         showInfo(number,event) {
              console.log(number);//666
              console.log(event.target.innerText);
              console.log(this);
          }
}

事件修饰符
@click.prevent

修饰符 描述
prevent 阻止默认事件
stop 阻止事件冒泡
once 事件只能触发一次
capture 使用事件的捕获模式
self 只有event.target是当前操作的元素时才能触发
passive 事件的默认行为立即执行,无需等待事件回调执行完毕

例如:

<button @click="showInfo(666,$event)" @click.prevent>点击按钮</button>

修饰符可以连续写,例如:@click.prevent.stop

键盘事件
@keydown和@keyup

1、Vue中常用的按键别名:
回车:enter
删除:delete(捕捉删除退格键
退出:esc
空格:space
换行:tab(必须配合keyup使用)
上:up
下:down
左:left
右:right
2、Vue未提供别名的按键,可以使用按键原始的key值去绑定,但注意要转为kebab-case(短横线命名)
3、系统修饰键(用法特殊):ctrlaltshiftmeta
配合keyup使用:按下修饰符的键的同时,再按下其他键,随后释放其他键,事件才被触发;
配合keydown使用:正常触发事件。
4、也可以使用keyCode 去指定具体的按键(不推荐)
5、Vue.config.keyCode. 自定义键名 = 键码. 可以去定制按键别名。

<input type="text" v-model:value="name" @keydown.enter = "showInfo(666,$event)">

Vue计算属性

computed中,创建fullName属性,通过get方法返回值;
计算属性好处:当有读取fullName值时,get就会被调用;get什么时候调用?初次读取时,所依赖的数据发生变化时。

<div>{{fullName}}</div>
computed: {
      fullName: {
          get() {
              return this.name + this.lastName;
          }
     }
}

简写形式:
调用计算属性时无需加括号(如this.fullName),Vue底层将其处理为属性访问

fullName() {
     return this.name + "-" + this.lastName;
}

注意:只读取不修改才可以用简写形式

监视
两种写法:
1、初始化Vue实例时:

const vm= new Vue({
      el: ".root",
      data: {
          isHot: true
      },
      watch:{
          isHot:{
              immediate:true,//初始化时让handler执行
              handler(newValue,oldValue){
                  console.log(`isHot新值:${newValue} 旧值:${oldValue}`)
              }
          }
      }
})

2、使用vm调用

vue.$watch('isHot', {
      immediate: true,//初始化时让handler执行
      handler(newValue, oldValue) {
          console.log(`isHot新值:${newValue} 旧值:${oldValue}`)
      }
})

深度监视
1、深度监视numbers内的属性a

'numbers.a': {
     handler(newValue, oldValue) {
         console.log(`a新值:${newValue} 旧值:${oldValue}`)
      }
}

2、深度监视numbers内的所有属性,默认是不开启deep的,需要设置deep才能监视内部所有属性

numbers: {
    deep:true,
    handler(newValue, oldValue) {
       console.log(`isHot新值:${newValue} 旧值:${oldValue}`)
      }
}

监视的简写形式
在不需要开启immediatedeep时,可以写为简写形式

isHot(newValue, oldValue) {
      console.log(`isHot新值:${newValue} 旧值:${oldValue}`)
}
vm.$watch('isHot', function (newValue, oldValue) {
      console.log(`isHot新值:${newValue} 旧值:${oldValue}`)
})

computed和watch的区别
1、computed能完成的功能,watch都能完成。
2、watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。

两个重要点:
1、所谓被Vue管理的函数,最好写成普通函数,这样this指向的才是vm或组件实例对象。
2、所谓不被Vue所管理的函数(定时器的回调函数、ajax的回调函数等),最好写成箭头函数,这样this指向的才是vm或组件实例对象。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容