vue基础知识:watch 侦听器(监视器)详解,watch监听器的作用,1.watch的简单写法:简单类型数据,直接监视,2.完整写法→添加格外的配置项

watch监听器的作用

watch监听器的作用:监视数据变化,执行一些业务逻辑和异步操作(数据一旦发生变化实时发送请求更新数据)

1.watch的简单写法:简单类型数据,直接监视

语法:

<script>
    const app = new Vue({
      el: "#app",
      data: {
        project: "语文",
        obj: {
          name: "张三",
        },
      },
      watch: {
        //该方法会在数据变化,触发执行
        数据属性名(newValue, oldValue) {
          一些业务逻辑或异步操作;
        },
        "对象.属性名"(newValue, oldValue) {
          一些业务逻辑或异步操作;
        },
      },
    });
  </script>
简单写法案例演示1:
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <textarea name="" v-model="project"></textarea>
    </div>
  </body>
  <script src="./vue.js"></script>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        project: "语文",
      },
      watch: {
        //该方法会在数据变化,触发执行
        //newValue新值,oldValue老值(一般不用)
        project(newValue, oldValue) {
          console.log("变化前的值:", newValue, "变化后的值:", oldValue);
        },
      },
    });
  </script>
</html>

 

 简单写法案例演示2(存在嵌套情况):
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <textarea name="" v-model="obj.project"></textarea>
    </div>
  </body>
  <script src="./vue.js"></script>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        obj: {
          project: "语文",
        },
      },
      watch: {
        //该方法会在数据变化,触发执行
        //newValue新值,oldValue老值(一般不用)
        "obj.project"(newValue, oldValue) {
          console.log("变化前的值:", newValue, "变化后的值:", oldValue);
        },
      },
    });
  </script>
</html>

2.完整写法→添加格外的配置项

1.deep:true对复杂类型深度监视(监视对象中的所有属性)

2.immediate:true 初始化立刻执行一次handler方法

完整写法案例演示1(deep的使用):
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <select v-model="obj.country">
        <option value="italy">意大利</option>
        <option value="english">英语</option>
        <option value="german">德语</option>
      </select>
      <textarea name="" v-model="obj.project"></textarea>
    </div>
  </body>
  <script src="./vue.js"></script>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        obj: {
          project: "语文",
          country: "english",
        },
      },
      watch: {
        //完整写法不是一个方法,是一个对象
        obj: {
          deep: true,
          handler(newValue) {
            console.log("对象被改变了", newValue);
          },
        },
      },
    });
  </script>
</html>

完整写法案例2(immediate的使用):
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <select v-model="obj.country">
        <option value="italy">意大利</option>
        <option value="english">英语</option>
        <option value="german">德语</option>
      </select>
      <textarea name="" v-model="obj.project"></textarea>
    </div>
  </body>
  <script src="./vue.js"></script>
  <script>
    const app = new Vue({
      el: "#app",
      data: {
        obj: {
          project: "语文",
          country: "english",
        },
      },
      watch: {
        //完整写法不是一个方法,是一个对象
        obj: {
          deep: true,
          immediate: true,
          handler(newValue) {
            console.log("对象被改变了", newValue);
          },
        },
      },
    });
  </script>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头顶一只喵喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值