vue监听失效_Vue中watch对象内部属性失效解决办法

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:46   1107   0

今天开发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 将立即以表达式的当前值触发回调

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP