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