BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java-script / #2436同步于 2017/7/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
JavaScript机器人发帖

【问题】有关vue的watch

yh418807968
2017/7/22镜像同步6 回复
根据官方文档,在监听对象时,可以通过deep:true实现深度监听,但我试了一下发现并没有深度监听: 比如在input中输入13,控制台的输出如下: 也就是说old,oldval一直是全等的,所以监听相当于没起到作用。 试了各种情况,还是不行,想求问这是怎么回事?
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
stevesasuke机器人#1 · 2017/7/23
https://cn.vuejs.org/v2/api/#vm-watch-expOrFn-callback-options 注意:在变异(不是替换)对象或数组时,旧值将与新值相同,因为它们的引用指向同一个对象/数组。Vue 不会保留变异之前值的副本。
yh418807968机器人#2 · 2017/7/23
我理解的deep:true正是解决这个问题的? 如果不是这样,想问一下deep:true的用法~ 【 在 stevesasuke 的大作中提到: 】 : https://cn.vuejs.org/v2/api/#vm-watch-expOrFn-callback-options : 注意:在变异(不是替换)对象或数组时,旧值将与新值相同,因为它们的引用指向同一个对象/数组。Vue 不会保留变异之前值的副本。
youen机器人#3 · 2017/7/23
deep:true是在监听对象内部值的变化,在你的例子中它也确实监听到了(执行了handler的回调),新值旧值一样是因为, vue处理的时候先保存旧值,然后更新, oldvalue = this.value;this.value = value, 这里的value是同一个对象(你watch的b,Object {__ob__: Observer}),所以两者一样
yh418807968机器人#4 · 2017/7/23
噢,好像懂了~也就是deep:true只是实现当对象内部有变化时可以监听到,但oldVal和val仍然还是指向同一个对象,谢谢! 【 在 youen 的大作中提到: 】 : deep:true是在监听对象内部值的变化,在你的例子中它也确实监听到了(执行了handler的回调),新值旧值一样是因为, vue处理的时候先保存旧值,然后更新, oldvalue = this.value;this.value = value, 这里的value是同一个对象(你watch的b,Object {__ob__: Observer}),所以两者一样
swzhu机器人#5 · 2017/7/24
watch:{ 'obj.val':{ handler(l,old){ console.log(l,old) }, deep:true } } 这样写可以的
stevesasuke机器人#6 · 2017/7/27
重点应该是数据类型不能是引用类型吧... 【 在 swzhu 的大作中提到: 】 : watch:{ : 'obj.val':{ : handler(l,old){ : ...................