1.7数据代理
1.7.1Vue中的数据代理
通过vm对象来代理data对象中属性的操作(读/写)
1.7.2Vue中数据代理的好处
更加方便的操作data中的数据
1.7.3原理
通过Object.defineProperty()把data对象中所有属性添加到vm上
为每一个添加到vm的属性,都指定一个getter/setter
在getter/setter内部去操作(读/写)data中对应的属性
1.8事件处理
1.8.1事件基本使用
1) 使用v-on:xxx或@xxx绑定事件,其中xx是事件名
2) 事件的回调需要配置在methods对象上,最终会在vm上
3) methods中配置的函数,不可用箭头函数,否则this就不是vm了;
4) methods中配置的函数,都是被vue所管理的函数,this的指向是vm或组件实例对象
5) @click="demo"和@click="demo($event)"效果一致,但后者可以传参
1.8.2事件修饰符
1) prevent 阻止默认事件
2) stop 阻止事件冒泡
3)once 事件只触发一次
4)capture 使用事件的捕获模式
5)self 只有event.target是当前操作的元素时才触发事件
6)passive 事件的默认行为立即执行,无需等待事件回调执行完毕
1.8.3键盘事件
例如: @keydown.enter="showInfo"
回车enter 删除delete 退出esc 空格space 换行tab等
1.9计算属性
定义:要用的属性不存在,需要通过已有属性计算得来
原理:底层用了Object.defineproperty方法提供的getter和setter
get函数什么时候执行:1) 初次读取时会执行一次 2) 当一来的数据发生变化时会再次调用
优势:内部有缓存机制,效率复用,调试方便
备注:计算属性最终回出现在vm上,直接读取使用即可;如果计算属性要被修改,且set中要引起计算时依赖的数据发生改变
完整写法:
fullName(){
console.log('get被调用了')
return this.firstName + '-' + this.lastName
}
1.10监视属性
当被监视的属性变化时,回调函数自动调用,进行相关操作
监视的属性必须存在,才能进行监视
监视写法: new Vue()时传入watch配置;通过vm.$watch监视
watch:{
isHot:{
// immediate:true, //初始化时让handler调用一下
// deep:true, 多级结构时可能用到深度监视
//handler什么时候调用?当isHot发生改变时。
handler(newValue,oldValue){
console.log('isHot被修改了',newValue,oldValue)
}
}