vue中的watch可以监听哪些值?


vue中的watch监听,除了监听data中的数据

还可以监听props、$route、$emit、computed

watch:{   //监听路由变化

     $route( to , from ){  
        console.log( to , from )
         // to , from 分别表示从哪跳转到哪,都是一个对象
         // to.path  ( 表示的是要跳转到的路由的地址 eg: /home );
      }
}
 
export default { data() { return { floorData0: {}, floorData1: {}, floorData2: {}, } }, props:['floorData'], watch:{ // 监听props
       floorData:(newVal,oldVal) => { console.log(newVal); this.floorData0 = newVal[0]; this.floorData1 = newVal[1]; this.floorData2 = newVal[2]; }
 } }

vue中的watch监听数据变化以及watch中各属性详解:

1、监听data数据变化

watch: {

  data(val, newval) {

    console.log(val)

    console.log(newval)

  }

2、通过watch监听docData数据的变化,数据发生变化时,this.change_number++(使用深度监听)

watch: {

  docData: {

    handler(newVal) {

      this.change_number++

    },

    deep: true

  }

}

3、通过watch监听data数据的变化,数据发生变化时,执行changeData方法

watch: {

  data: 'changeData' // 值可以为methods的方法名

},

methods: {

  changeData(curVal,oldVal){

    conosle.log(curVal,oldVal)

  }

}

 

延伸:

详解watch中的immediate、handler和deep属性

1)immediate和handler

这样使用watch时有一个特点,就是当值第一次绑定时,

不会执行监听函数,

只有值发生改变时才会执行。如果我们需要在最初绑定值的时候也执行函数,

则就需要用到immediate属性。

watch: {

  docData: {

    handler(newVal) {

      this.change_number++

    },

    immediate: true

  }

}

2)deep

当需要监听一个对象的改变时,

普通的watch方法无法监听到对象内部属性的改变,

此时就需要deep属性对对象进行深度监听。

data() {

  return {

    docData: {

      'doc_id': 1,

      'tpl_data': 'abc'

    }

  }

},

watch: {

  docData: {

    handler(newVal) {

      this.change_number++

    },

    deep: true

  }

}

设置deep:true则可以监听到docData.doc_id的变化,

此时会给docData的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler。

如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性:

data() {

  return {

    docData: {

      'doc_id': 1,

      'tpl_data': 'abc'

    }

  }

},

watch: {

    'docData.doc_id': {

      handler(newVal, oldVal) {

      ......

      },

    deep: true

  }

}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM