默认方式
没什么可说的~~~
status: function(newVal){
// 处理被观察属性的变化
}
// 或者
status: function(newVal, oldVal){
// 处理被观察属性的变化
}
带选项的方式
注意选取合适的选项参数
示例
status: {
immediate: true,
deep: true,
handler(newVal, oldVal) {
}
},
- immediate
官方解释是 在选项参数中指定
immediate: true
将立即以表达式的当前值触发回调,其实可以理解为首次给被监测的实例赋初始值时是否执行handler处理,实际上大部分情况是不需要的,更多情况是期望拿到特定情况下的变化值来做响应的逻辑处理。 - deep
为了发现对象内部值的变化,可以在选项参数中指定
deep: true
。注意监听数组的变动不需要这么做。
如果想监听对象的内部某一个属性值的变化,可以设置deep:ture
,这时监听器会给对象内部的所有属性加上watch,如果对象内部层级有多级,且会逐层添加,所以会对性能的影响较大,这时候我们可以考虑采用键路径
的方式实现。
切记监听数组的变动不需要这么做!
键路径方式
如果deep对性能的开销过大可以考虑采用键路径方式去实现,如下示例:
'setting.status': {
handler(newVal, oldVal) {
}
},