今天开发vue的时候,遇到了坑,网上查询,结合实践沉淀一下:
在data里初始化了一个对象,然后,想要watch到对象的内部属性?
data:function(){
return {
form:{
name:''
}
}
}
具体代码如上所示,现在想要watch form.name这个属性值,
watch:{
form.name(){}
}
或者ts内
@Watch('form.name')
...
上面写法会直接语法报错
解决一: handler
watch:{
form:{
handler(){
console.log(this.form.name)
},
deep:true
}
}
解决二:handle again
watch: {
'form.name': {
handler: function() {
//do something
},
}
}
解决三:另路
computed: {
name: function() {
return this.form.name
}
}
watch: {
name: {
handler: function() {
//do something
},
}
}
因为不能直接watch到对象(引用类型)的内部属性,所以利用计算属性,和中间变量解决。
希望上述方法能够帮到你。
下面是参考:
Vue的API关于watch选项这里,官方教程内的代码:
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
},
// 该回调将会在侦听开始之后被立即调用
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
handle就是你watch中需要具体执行的方法
deep:就是你需要监听的数据的深度,一般用来监听对象中某个属性的变化
immediate:在选项参数中指定 immediate: true 将立即以表达式的当前值触发回调