vue学习路线(10.监视属性-watch)

一、用案例引出监视属性 watch

案例:点击'切换天气'按钮,页面红色文字发生变化(如果是凉爽改为炎热,如果是炎热改为凉爽),同时控制台打印变化日志。

1、普通写法
xml 复制代码
<h2>今天天气很
    <span style="color: red">{{info}}</span>
</h2>
<button @click="changeWeather">切换天气</button>
kotlin 复制代码
data() {
    return {
        isHot: false,
    };
},
computed: {
    info() {
        return this.isHot ? "炎热" : "凉爽";
    },
},
methods: {
    changeWeather() {
        this.isHot = !this.isHot;
        console.log("天气变化了,现在是:" + this.info + ",原来是" + (this.isHot ? "凉爽" : "炎热"));
    }
},
2、new Vue时传入watch配置

当属性变化时,回调函数自动调用,在函数内部进行计算。

xml 复制代码
<h2>今天天气很
    <span style="color: red">{{info}}</span>
</h2>
<button @click="isHot = !isHot">切换天气</button>
javascript 复制代码
data() {
    return {
        isHot: false,
    };
},
computed: {
    info() {
        return this.isHot ? "炎热" : "凉爽";
    },
},
watch: {
     info: {
         handler(newValue, oldValue) {
             console.log("天气变化了,现在是:" + newValue + ",原来是" + oldValue);
         },
      },
},
3、通过vm.$watch监视

两种watch用法,handler内部写法一致

xml 复制代码
<h2>今天天气很
    <span style="color: red">{{info}}</span>
</h2>
<button @click="isHot = !isHot">切换天气</button>
javascript 复制代码
      const vm = new Vue({
        el: "#app",
        data() {
          return {
            isHot: false,
          };
        },
        computed: {
          info() {
            return this.isHot ? "炎热" : "凉爽";
          },
        },
      });

      vm.$watch("info", {
        handler(newValue, oldValue) {
          console.log("天气变化了,现在是:" + newValue + ",原来是" + oldValue);
        },
      });

二、watch 的特点

    1. 当被监视的属性发生变化时,回调函数自动调用,进行相关操作;
    1. 监视的属性必须存在,才能进行监视!!
    1. 监视的两种写法:

    1)new Vue时传入watch配置

    2)通过vm.$watch监视

三、watch 属性的选项

  • immediate: true:表示在监听开始时立即执行回调函数,而不是等到数据变化时才执行。
  • deep: true:表示深度监听,适用于监听对象或数组的变化。
javascript 复制代码
 watch: {
          info: {
            immediate:true,//默认false。改为true表示立即执行回调函数。
            deep:true,// 默认false。深度监听,适用于监听对象或数组
            handler(newValue, oldValue) {
              console.log("天气变化了,现在是:" + newValue + ",原来是" + oldValue);
            },
          },
        },

四、watch 监视属性简写

  • 当配置项只有handler时,可以简写
  • 不能写成箭头函数
1、new Vue时传入watch配置(简写)
javascript 复制代码
watch: {
    info(newValue, oldValue) {
        console.log("天气变化了,现在是:" + newValue + ",原来是" + oldValue);
    },
},
2、通过vm.$watch监视(简写)
javascript 复制代码
vm.$watch("info", function (newValue, oldValue) {
    console.log("天气变化了,现在是:" + newValue + ",原来是" + oldValue);
});

五、watch 深度监视特点

1、深度监听特点
  • 1.vue中的watch默认不监测对象内部值的改变(一层)。
  • 2.配置deep:true可以监测对象内部值的改变(多层)。
2、深度监听案例
less 复制代码
      <h3>a的值是{{numbers.a}}</h3>
      <button @click="numbers.a++">点我a+1</button>
      <h3>b的值是{{numbers.b}}</h3>
      <button @click="numbers.b++">点我b+1</button>
css 复制代码
        data() {
          return {
            numbers: {
              a: 1,
              b: 1,
            },
          };
        },
实现一:只监视a,不监视b(监视多级结构中某个属性的变化)
javascript 复制代码
        watch: {
          // 只监视a,不监视b
           'numbers.a': {
              handler(newValue, oldValue) {
                console.log(newValue,oldValue);
              },
            },
        },
实现二:深度监听number变化(监视多级结构中所有属性的变化)
javascript 复制代码
        watch: {
          //深度监听
           'numbers': {
            deep:true,//开启深度监听
              handler(newValue, oldValue) {
                console.log('numbers变化了');
              },
            },
        },
3、备注
  • 1.vue自身可以监测对象内部值的改变,但vue提供的watch默认不可以(为了效率)。

  • 2.使用watch时根据数据的具体结构,决定是否采用深度监听。

相关推荐
鹏程十八少9 小时前
破解Android悬浮窗遮挡无障碍服务难题:我在可见即可说上踩过的坑
android·前端·面试
Kapaseker9 小时前
前端已死...了吗
android·前端·javascript
m0_471199639 小时前
【自动化】前端开发,如何将 Jenkins 与 Gitee 结合实现自动化的持续集成(构建)和持续部署(发布)
前端·gitee·自动化·jenkins
w***95499 小时前
spring-boot-starter和spring-boot-starter-web的关联
前端
Moment10 小时前
富文本编辑器技术选型,到底是 Prosemirror 还是 Tiptap 好 ❓❓❓
前端·javascript·面试
xkxnq10 小时前
第二阶段:Vue 组件化开发(第 18天)
前端·javascript·vue.js
晓得迷路了10 小时前
栗子前端技术周刊第 112 期 - Rspack 1.7、2025 JS 新星榜单、HTML 状态调查...
前端·javascript·html
怕浪猫10 小时前
React从入门到出门 第五章 React Router 配置与原理初探
前端·javascript·react.js
jinmo_C++10 小时前
从零开始学前端 · HTML 基础篇(一):认识 HTML 与页面结构
前端·html·状态模式
鹏多多10 小时前
前端2025年终总结:借着AI做大做强再创辉煌
前端·javascript