当前位置: 首页 > news >正文

【Vue】Vue中的侦听器watch

💭💭

✨: Vue中的侦听器watch

💟:东非不开森的主页

💜:如果有幸和你一起学习一起进步,那就太棒啦💜💜

Vue中的侦听器watch

    • 一、侦听器watch
      • 1.1.初识侦听器watch
      • 1.2.Vue的data的watch
      • 1.3.Vue的watch侦听选项

一、侦听器watch

在这里插入图片描述
(思维导图不太完善,因为是按照自己看懂的方式记的,如有错误,还请指正)

1.1.初识侦听器watch

⭐⭐
watch:观看,监视

在这里插入图片描述

那么什么是侦听器watch

  • 开发中我们在data返回的对象中定义了数据,这个数据通过插值语法等方式绑定到template中;
  • 当数据变化时,template会自动进行更新来显示最新的数据;
  • 但是在某些情况下,我们希望在代码逻辑中监听某个数据的变化,这个时候就需要用侦听器watch来完成了;

1.2.Vue的data的watch

⭐⭐
案例:

  • 我们希望用户在input中输入一个问题;
  • 每当用户输入了最新的内容,我们就获取到最新的内容,并且使用该问题去服务器查询答案;
  • 那么,我们就需要实时的去获取最新的数据变化;
  • 此时就要用到侦听器watch去监听数据是否发生变化
const app = Vue.createApp({
        data() {
          return {
            message: "Hello Vue",
            info: { name: "kk", age: 18 },
          };
        },
        methods: {
          changeMessage() {
            this.message = "hello kk";
            this.info = { name: "kk" };
          },
        },

        watch: {
          // 1.默认有两个参数,newValue/oldValue
          message(newValue, oldVale) {
            console.log("message数据发生了变化", newValue, oldValue);
          },
          info(newValue, oldValue) {
            // 2.如果是对象类型,那么拿到的是代理对象
            console.log("info数据发生了变化", newValue, oldValue);
            console.log(newValue.name, oldValue.name);

            // 3.获取原始对象
            console.log({ ...newValue });

1.3.Vue的watch侦听选项

⭐⭐

  1. 创建一个对象,赋值给info
  2. 点击按钮的时候会修改info.name的值
  3. 此时使用watch并不能侦听info,因为默认情况下,watch只是在侦听info的引用变化,对于内部属性的变化是不会做出响应的
  4. 所以我们可以使用deep深度监听
  5. 希望一开始的就会立即执行一次:这个时候我们使用immediate选项;无论数据是否变化,侦听的函数都会有限执行一次的
<div id="app">
      <h2>{{info.name}}</h2>
      <button @click="changeInfo">修改info</button>
    </div>

 const app = Vue.createApp({
        data() {
          return {
            info: { name: "kk", age: 18 },
          };
        },

        methods: {
          changeInfo() {
            // 创建一个对象,赋值给info
            this.info = { name: "kk" };

            // 直接修改对象里的一个属性
            this.info.name = "kk";
          },
        },

        watch: {
          // 默认watch监听不会进行深度监听
          info(newValue, oldValue) {
            console.log("侦听到info改变", newValue, oldValue);
          },

          // 进行深度监听
          info: {
            handler(newValue, oldValue) {
              console.log("侦听到info改变", newValue, oldValue);
              console.log(newValue === oldValue);
            },

            // 监听器选项
            // info进行深度监听
            deep: true,

            // 第一次渲染直接执行一次监听器
            immediate: true,
          },
        },

        "info.name": function (newValue, oldValue) {
          console.log("name发生改变", newValue, oldValue);
        },
      });

      app.mount("#app");

相关文章:

  • 合宙AIR32F103CBT6刷回CMSIS-DAP固件以及刷ST-LINK固件方法
  • 【C++修炼之路】4. 类和对象(中):日期类实现
  • 【百日刷题计划 第三天】——熟悉语法 语法基础题
  • 【Vue】初识Vue,Vue简介及Vue Devtools配置
  • 【云计算 | OpenStack】在无法网络访问的情况下,如何在KVM虚机和宿主机之间互传文件
  • java毕业设计演出票在线预定网站系统Mybatis+系统+数据库+调试部署
  • 多线程同步-信号量内核对象
  • SpringBoot+Vue实现前后端分离教学评价系统
  • 【漏洞复现-phpmyadmin-文件包含】CVE-2014-8959
  • 用于交通预测的时空交互动态图卷积网络
  • 【尚学堂】超火爆的Java游戏羊了个羊_java开发游戏项目
  • 【DDR3 控制器设计】(2)DDR3 初始化测试
  • 数据结构之树2
  • 微信小程序开发实战9_1 生成小程序码
  • Informer时序模型(代码解析)
  • 11111111
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • bearychat的java client
  • express + mock 让前后台并行开发
  • gf框架之分页模块(五) - 自定义分页
  • HTML中设置input等文本框为不可操作
  • IDEA 插件开发入门教程
  • IP路由与转发
  • JS题目及答案整理
  • maven工程打包jar以及java jar命令的classpath使用
  • passportjs 源码分析
  • Phpstorm怎样批量删除空行?
  • Promise面试题,控制异步流程
  • Python利用正则抓取网页内容保存到本地
  • select2 取值 遍历 设置默认值
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 构造函数(constructor)与原型链(prototype)关系
  • 悄悄地说一个bug
  • 区块链分支循环
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 函数计算新功能-----支持C#函数
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 昨天1024程序员节,我故意写了个死循环~
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​人工智能书单(数学基础篇)
  • ​如何在iOS手机上查看应用日志
  • #单片机(TB6600驱动42步进电机)
  • $.ajax中的eval及dataType
  • $NOIp2018$劝退记
  • (1)Nginx简介和安装教程
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)SSM环卫人员管理平台 计算机毕设36412