注意:監聽的對象必須已經在data中聲明了
data: {
a: 1,
b: 2,
c: 3,
d: 4,
e: {
f: {
g: 5
}
}
},
watch: {
a: function (val, oldVal) {
console.log('new: %s, old: %s', val, oldVal)
},
// string method name
b: 'someMethod',
// deep watcher
e: {
handler: function (val, oldVal) { /* ... */ },
deep: true
},
// the callback will be called immediately after the start of the observation
d: {
handler: function (val, oldVal) { /* ... */ },
immediate: true
},
e: [
function handle1 (val, oldVal) { /* ... */ },
function handle2 (val, oldVal) { /* ... */ }
],
// watch vm.e.f's value: {g: 5}
'e.f': function (val, oldVal) { /* ... */ }
}
})
vm.a = 2 // => new: 2, old: 1
比如下面例子
//監聽某個變量
watch: {
bet(newValue, oldValue) {
console.log(newValue);
}
}
//監聽對象 某一個屬性
watch: {
'bet.text': function (val, oldVal) {}
}
//監聽 整個對象(數組)
serviceList:{
handler(){ //注意此處就是handler
console.log(this.serviceList);
},
deep:true,
immediate: true // watch 的一個特點是,最初綁定的時候是不會執行的,要等到 serviceList 改變時才執行監聽計算。加上改字段讓他最初綁定的時候就執行
},
對於vue的深層對象數組的監控 可能不能得到及時的刷新 直接對比oldVal 和newVal時可能對比不出變化來,若想根據具體值的變化 而對內部其他的參數賦值 需要在nextTick里面進行,比如:
deep1.pars pars 是 [{min:'',max:'',fix:''},{min:'',max:'',fix:''}]
需求時pars數組的第一項的max的變化修改第二項的min值等於第一項的max 通過監控deep1.pars的變化 對內部元素賦值時需要使用nextTick
但是建議若是min和max是用戶觸發的 可以使用change事件去監控變化並且做相應的修改操作
