侦听属性 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

相关文章
|
9月前
|
缓存
computed【计算属性】watch【监听】methods【方法】的区别
computed【计算属性】watch【监听】methods【方法】的区别
|
2天前
|
JavaScript
vue中watch监听路由传来的参数变化问题
vue中watch监听路由传来的参数变化问题
5 0
|
5天前
|
缓存 JavaScript
computed/watch深度监听
computed/watch深度监听
12 1
|
5天前
v-on监听多个方法
v-on监听多个方法
|
25天前
vue3 watch 监听多值以及深度监听用法
vue3 watch 监听多值以及深度监听用法
45 0
|
3月前
当监听的属性是对象的引用时,`watch`选项是否会触发监听?
当监听的属性是对象的引用时,`watch`选项是否会触发监听?
13 2
|
3月前
|
JavaScript
如何使用`watch`选项来监听特定属性的变化?
如何使用`watch`选项来监听特定属性的变化?
13 0
|
4月前
|
JavaScript 前端开发 UED
v-on 可以监听多个方法吗?
v-on 可以监听多个方法吗?
39 0
|
5月前
如何监听vuex中的变量参数变化,用watch!
如何监听vuex中的变量参数变化,用watch!
|
8月前
|
JavaScript
Vue中watch监听属性新旧值相同问题解决方案,watch
Vue中watch监听属性新旧值相同问题解决方案,watch
125 0