关于vuejs的侦听属性watch的三个问题

问题1

    methods: {
        resume() {
            this.formEdit={a:1};
        }
    },
    watch: {
        formEdit(newVal, oldVal) {
            console.log(oldVal)
        },
    }
  • 现象:当执行resume方法时,都会触发formEdit的侦听。
  • 原因:“有做赋值操作,就会走监听回调,但不会渲染页面”,并不是formEdit值改变的时候才触发侦听

问题2

<input v-model="formEdit.a" />

    watch: {
        formEdit(newVal, oldVal) {
            console.log(oldVal)
        },
    }        
  • 现象:input输入框输入值的时候,并不会触发formEdit的侦听
  • 原因:默认不会监听对象里面的属性改变,要侦听的话代码需要改成:
      watch: {
          'formEdit': {
            handler: function(newVal, oldVal) {
                console.log(oldVal)
            },
            deep: true,
            //immediate: true, //初始绑定时就侦听 
          },
      }

问题3

问题2的问题解决了,但是当打印侦听到的formEdit的newVal和oldVal时发现,他们的值是一样的,为什么呢?因为侦听对象或者数组时,vue不会保留旧的副本。参考小tips,注意vue深度监听对象新老值如何保持不一样
解决办法就是用计算属性包装一下,再侦听这个计算属性。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!