Watch 侦察属性
- 用于监听数据是否改变
- 适合做历史记录的追踪和撤销
- watch是异步的, 异步的意思是在当前所有代码执行完了才会执行watch内的代码
- watch初始化页面时不会自动执行,而是在数据被修改后执行
- 但高级功能是
immediate:true让属性支持初始化页面时自动执行一次 在线示例
- 但高级功能是
- watch另一个高级功能是
deep属性,允许你以主观意愿告诉Vue数据是否变了- 复杂对象的引用地址变了才算是变,而简单类型数据只需要数据变了就算变
obj={a:1},obj.a变了理论上并不会触发obj的变化,而deep属性则可以监测这一点!- 即哪怕
obj.a发生变化,obj整体就算变化 在线示例
this.$nextTick解决watch异步问题
先查看一个例子 这个例子展示了watch异步问题的解决
- Vue解决异步问题时用的就是自己封装的nextTick,因为源码中就是用nextTick,只有和它用同一个级别的异步函数才能将任务安排于发生watch之后,并不是setTimeout都可以解决的
- 这个例子其实用debugger方式就可以观察到
watch中属性监听的几种写法
watch:{
o1:function(newValue,oldValue){},
o2(){},
o3:[f1,f2],
o4:'methodName',
o5:{handler:fn,deep:true,immediate:true},
'object.a':function(){}
}
methods 可以使用时传参也可以定义是传参
Computed 计算属性
- 就当作正常的属性去使用即可,
computed初次就会运行 - 常用
getter,但它也有setter
computed与methods之间的区别:
- 只要挂到页面上的任意 data 有任何变动,页面就会刷新,method 会因此重新执行
- 计算属性挂载在页面上之后,哪怕页面刷新,计算属性的缓存机制保证不会重复运行
- 但如果你用的是
{{ xxx() }}这样的方法,那么每次页面的刷新必会重新执行一遍
拓展成
setter
computed:{
xxx(){ // 这就是默认getter
return
}
}
computed:{
xxx:{ // 拓展写法
get(){}
set(){}
}
}
Computed 可以用于 :class 或者 :style
返回一个对象即可 在线示例