侦听属性 watch

简介: 侦听属性 watch

如果希望监听某个数据的变化,当数据变化后,再做出特定的操作,这个时候就需要使用侦听属性了。

侦听属性 watch 适合处理一些消耗性能的需求,比如 Ajax 请求等等。

当被监视的数据发生变化时,回调函数会自动执行,并进行相关操作。

监视的数据必须存在,才能进行监听!!

正常写法:

<div id="APP">
  <h2>今天天气很{{info}}</h2>
  <button @click="istoggle">切换天气</button>
</div>
const vm = new Vue({
  el: "#APP",
  data(){
    return {
      isHot: true
    }
  },
  methods:{
    istoggle(){
      this.isHot = !this.isHot;
    }
  },
  computed:{
    info(){
      return this.isHot ? '炎热' : '凉爽';
    }
  },
  watch:{
    // 侦听属性的名称必须和数据名称一致。
    isHot:{
      // 侦听属性中的 handler 是一个配置项,当监听的数据发生变化后就会执行。
      handler(newValue,oldValue){
        // 可以在 handler 中接收新旧数据,参数名自定义。
        console.log("isHot被修改了");
        console.log("改变后的数据",newValue);
        console.log("改变前的数据",oldValue);
      }
    },
  }
});

:当点击切换天气按钮后,监听的数据 isHot 发生了变化,就会自动执行 watch 中的 isHot 侦听属性。

深度监视:

<div id="APP">
  <h3>a的值是:{{numbers.a}}</h3>
  <button @click="adda">点击让a+1</button>
  <h3>b的值是:{{numbers.b}}</h3>
  <button @click="addb">点击让b+1</button>
  <hr/>
  <button @click="isReplace">替换numbers的引用地址</button>
</div>

原因:当我们改变 a 或者改变 b 的值时,只是改变的 numbers 对象中的内容,而 numbers 对象的引用地址未发生改变,所以不会触发 numbers 的侦听属性。

 

 

:当改变 numbers 的引用地址时,也可以触发内部值 a 和 b 的侦听属性。

深度监视:如果想改变 a 或者改变 b 的值时,让 numbers 的侦听属性也执行,就需要开启深度监视了。

在侦听属性中,配置 deep 属性为 true 就可以监测对象内部值的改变了,监测多层数据。

简写方式【常用】

当 watch 的配置项只需要用到 handler 时,就可以使用简写的方式了。也就是说简写方式不可以使用 immediate 初始化执行或者 deep 深度监视 。

<div id="APP">
  <h3>num的值是:{{num}}</h3>
  <button @click="add">点击让num+1</button>
</div>
const vm = new Vue({
  el: "#APP",
  data(){
    return {
      num: 1
    }
  },
  methods:{
    add(){
      this.num++;
    },
  },
  watch:{
    num(newValue,oldValue){
      console.log("num 被修改了");
      console.log("改变后的数据",newValue);
      console.log("改变前的数据",oldValue);
    }
  }
});

:简写时侦听属性需要写成函数,但是不能写成箭头函数!否则 this 将不再指向 Vue 实例 或 组件实例对象。

 

$watch 简写方式【了解】

<div id="APP">
  <h3>num的值是:{{num}}</h3>
  <button @click="add">点击让num+1</button>
</div>
const vm = new Vue({
  el: "#APP",
  data(){
    return {
      num: 1
    }
  },
  methods:{
    add(){
      this.num++;
    },
  }
});
vm.$watch('num',function(newValue,oldValue){
  console.log("num 被修改了");
  console.log("改变后的数据",newValue);
  console.log("改变前的数据",oldValue);
})

 

原创作者 :吴小糖

创作时间:2023.2.12

相关文章
|
6月前
|
缓存 JavaScript 数据处理
在Vue中,什么时候使用computed属性,什么时候使用watch监听属性?
在Vue中,什么时候使用computed属性,什么时候使用watch监听属性?
80 0
computed【计算属性】watch【监听】methods【方法】的区别
computed【计算属性】watch【监听】methods【方法】的区别
|
25天前
|
JavaScript
computed 计算属性和 watch 监听函数的执行顺序
【10月更文挑战第23天】理解`computed`计算属性和`watch`监听函数的执行顺序是 Vue.js 开发中的一个重要知识点,它有助于我们更好地处理数据的变化和响应,确保应用的正常运行和性能优化。
|
2月前
|
前端开发
this.props.history.listen路由监听与取消监听
在React中使用`this.props.history.listen`进行路由变化监听,并在组件卸载时通过调用返回的函数取消监听,以避免不必要的回调执行或内存泄漏。
35 2
|
4月前
|
JavaScript API
vue3【实用教程】侦听器 watch,自动侦听 watchEffect(),$watch,手动停止侦听器
vue3【实用教程】侦听器 watch,自动侦听 watchEffect(),$watch,手动停止侦听器
96 0
|
4月前
|
缓存 JavaScript
计算属性(computed)和侦听器(watch)
计算属性(computed)和侦听器(watch)
54 0
|
6月前
|
缓存 JavaScript
computed/watch深度监听
computed/watch深度监听
201 1
|
6月前
vue3 watch 监听多值以及深度监听用法
vue3 watch 监听多值以及深度监听用法
2023 0
|
6月前
当监听的属性是对象的引用时,`watch`选项是否会触发监听?
当监听的属性是对象的引用时,`watch`选项是否会触发监听?
40 2
|
6月前
|
JavaScript
如何使用`watch`选项来监听特定属性的变化?
如何使用`watch`选项来监听特定属性的变化?
46 0