vue 深度监听

首先要知道vue的watch(侦听器),侦听某属性,当属性发生变化时执行对应的操作函数.

watch:{
    attributeName:function(){
        //侦听到属性变化后的具体操作
    }
}

先看一个demo:

<template>
  <div class="hello">
    <input type="text" v-model="test.name" @click="cChange">
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data(){
    return{
      test:{
        name:'zsy'
      }
    }
  },
  watch:{
    test:function(){
      console.log('test改变了');
    }
  },
  methods:{
    cChange:function(){
      this.test.name = 'fuck'
    }
  }
}
</script>

侦听一个object类型的属性,当改变它的一个键值时并没有改变侦听的该属性的地址,因此并不会触发侦听的执行函数.Array类型的同样如此.如果想实现预期的侦听操作则需要用到深度侦听

watch侦听属性其实还有三个参数:

handler:回调函数,两个参数分别为所侦听的属性的 新值 和 旧值

depp: Boolean类型,是否深度侦听,即是否侦听对象内部值的变化(此参数则是本博客的核心

immediate:Boolean类型,是否立即调用(此处要说明一下,侦听器第一次绑定上时是不会立即执行的,只有当属性发生变化时才会触发),而此参数设置为true时第一次绑定侦听器时便会触发

<template>
  <div class="hello">
    <input type="text" v-model="test.name" @click="cChange">
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data(){
    return{
      test:{
        name:'zsy'
      }
    }
  },
  watch:{
    test:{
      handler:function(newVal, oldVal){
        console.log('test改变了',newVal,oldVal);
      },
      deep:true,        //深度监听
      immediate:true    //初次绑定执行回调
    }
  },
  methods:{
    cChange:function(){
      this.test.name = 'fuck'
    }
  }
}
</script>

猜你喜欢

转载自blog.csdn.net/zSY_snake/article/details/84837048