語法
方式一
data () {
return {
someValue: 'hello'
}
},
watch: {
someValue (newValue, oldValue) {
console.log(newValue)
}
}
方式二
data () {
return {
someValue: 'hello'
}
},
watch: {
someValue: {
handler (newValue, oldValue) {
console.log(newValue)
},
// ...
}
}
特殊類型
對象(數(shù)組)
data () {
return {
person: {
age: 18
}
}
},
watch: {
person: {
handler (newValue, oldValue) {
console.log(newValue)
},
deep: true
}
}
對象的具體屬性
方式一
data () {
return {
person: {
age: 18
}
}
},
computed: {
age () {
return this.person.age
}
},
watch: {
age (newValue, oldValue) {
console.log(newValue)
}
}
方式二
data () {
return {
person: {
age: 18
}
}
},
watch: {
'person.age' (newValue, oldValue) {
console.log(newValue)
}
}
屬性
deep
handler (newValue, oldValue) {
console.log(newValue)
},
deep: true
默認(rèn)值是 false号杏,代表是否深度監(jiān)聽
默認(rèn)情況下 handler 只監(jiān)聽對象引用的變化盾致,只有給對象賦值的時候它才會被監(jiān)聽到庭惜,當(dāng)使用這個屬性后护赊,偵聽器會遍歷對象砾跃,為對象的所有屬性加上偵聽器抽高,所以當(dāng)對象的任何屬性變化都會觸發(fā)偵聽器中的handler翘骂。當(dāng)對象屬性多的時候雏胃,性能開銷會比較大志鞍,此時可以監(jiān)聽對象的某個具體屬性。
immediate
handler (newValue, oldValue) {
console.log(newValue)
},
immediate: true
watch在初始化綁定的時候不會執(zhí)行固棚,等到改變之后才會去偵聽計算统翩。使用這個屬性后,在初始化綁定的時候此洲,也會去執(zhí)行偵聽器厂汗。
官方文檔示例
var vm = new Vue({
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)
},
// 方法名
b: 'someMethod',
// 深度 watcher
c: {
handler: function (val, oldVal) { /* ... */ },
deep: true
},
// 該回調(diào)將會在偵聽開始之后被立即調(diào)用
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
監(jiān)聽路由
刷新本頁面的時候可以傳一個時間戳,通過監(jiān)聽路由重新調(diào)用所有方法
watch:{
$route(to,from){
console.log(to.path);
}
},