你可以在 Vue 实例中监视数据的变化。需要注意的是,所有的 watch 回调都是异步发生的,而且这些回调和指令一样被进行了异步批量处理。这就意味着如果一份数据在同一个事件循环 (event loop) 中多次变化,只会以最后一个值触发一次回调。
vm.$watch( expOrFn, callback, [options] )
expOrFn
String|Function
callback( newValue, oldValue )
Function
options
Object
optional
deep
Boolean
immediate
Boolean
sync
Boolean
在当前 Vue 实例上监听一个表达式或是一个计算函数的值。
1 2 3 4 5 6 7 8 9 10 11 12
vm.$watch('a + b' , function (newVal, oldVal ) { }) vm.$watch( function () { return this .a + this .b }, function (newVal, oldVal ) { } )
如果要监视在对象中深层嵌套的属性变化,需要在
options
参数里传递
deep: true
来启用深度数据观察。注意在监听数组本身结构变化 (mutations) 的时候不需要此参数。
1 2 3 4 5
vm.$watch('someObject' , callback, { deep: true }) vm.someObject.nestedValue = 123
如果在
options
参数里加上
immediate: true
,那么回调会带着现在表达式的结果被立即触发。
1 2 3 4
vm.$watch('a' , callback, { immediate: true })
最后,
vm.$watch
会返回一个停止数据观察的句柄函数。
1 2 3
var unwatch = vm.$watch('a' , cb)unwatch()
vm.$get( expression )
expression
String
为 Vue 实例传递一个表达式来获得结果,如果表达式抛错,该错误会被截获并返回
undefined
。
vm.$set( keypath, value )
keypath
String
value
*
通过给 Vue 实例传递一个可用的路径来设置结果,如果路径不存在那么会被递归创建。
vm.$add( key, value )
key
String
value
*
为 Vue 实例及其
$data
对象添加一个顶层属性 (root level property)。由于 ES5 的限制,Vue 无法侦测到对象中属性的增加或者删除,所以当你需要动态添加/删除属性的时候请使用此方法和
vm.$delete
,但请谨慎使用,因为此方法会使得当前 vm 对所有 watcher 进行一次脏检查。
vm.$delete( key )