Vue进阶(八十九):watch 用法详解

2024-02-16 19:18

本文主要是介绍Vue进阶(八十九):watch 用法详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、第一种方式
    • 二、第二种方式
    • 三、第三种方式
    • 四、监听数组变化
    • 五、注意事项⚠️
    • 六、拓展阅读


Vue中,应用watch来响应数据的变化,示例代码如下,

一、第一种方式

<input type="text" v-model="userName"/>  
//监听当userName值发生变化时触发
watch: {userName (newName, oldName) {console.log(newName)}
}

第一种方式有一个缺点: 就是当值第一次绑定的时候不会执行监听函数,只有当值改变的时候才会执行。

如果我们想在第一次绑定的时候就执行此监听函数,则需要设置immediatetrue。比如当父组件向子组件动态传值时,子组件props首次获取到父组件传来的默认值时,也需要执行函数,此时就需要将immediate设为true

二、第二种方式

watch: {userName: {handler (newName, oldName) {console.log(newName)},immediate: true}
}

immediate表示在watch中首次绑定的时候,是否执行handler,值为true则表示在watch中声明时,立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler

当需要监听一个对象的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听。

三、第三种方式

<input type="text" v-model="cityName.name" />
data (){return {cityName: {name:'北京',location: '中国'}}
},
watch: {cityName: {handler(newName, oldName) {console.log(newName)},immediate: true,deep: true}
}

注:监测对象的时候,newVal == oldVal

此时会给cityName的所有属性都加上监听函数,如果属性较多时,每个属性值的变化都会执行handler。如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性

watch: {'cityName.name': {handler(newName, oldName) {console.log(newName)},immediate: true,deep: true}
}

四、监听数组变化

1.watch能监听到数组push时的改变,例如

data () {return {demo: [1,2]}
},mounted (){window.myVue = this},
watch: {demo(val){console.log(val)}
},myVue.demo.push(3)  //[1,2,3]

2.watch 不能检测以下变动的数组:

  • 当你利用索引直接设置一个项时,例如:myVue.demo[1] = 5
  • 当你修改数组的长度时,例如:myVue.demo.length = 2

此时,你可以删除原有键,再 $set 一个新的值,这样就可以触发watch

myVue.$set(myVue.demo,0,8)  // [8,2,3]

3.更复杂一点,对数组嵌套对象进行监听的时候,这时就需要深度监听。

data () {return {demo:[{name:'张三',age:18},{name:'李四',age:20}]}
},
mounted (){window.myVue = this
},
watch: {demo: {handler (val) {console.log(val)},// 这里是关键,代表递归监听 demo 的变化deep: true}
},myVue.demo[0].age = 30  //[{name:'张三',age:30},{name:'李四',age:20}]

五、注意事项⚠️

  • watch中不要使用箭头函数,因为箭头函数中的this是指向当前作用域.

六、拓展阅读

  • 《Vue进阶(八十四):Computed 和 Watch 使用与区别》
  • 《Vue进阶(八十三): updated和watch的区别》

这篇关于Vue进阶(八十九):watch 用法详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/715447

相关文章

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

mapstruct中的@Mapper注解的基本用法

《mapstruct中的@Mapper注解的基本用法》在MapStruct中,@Mapper注解是核心注解之一,用于标记一个接口或抽象类为MapStruct的映射器(Mapper),本文给大家介绍ma... 目录1. 基本用法2. 常用属性3. 高级用法4. 注意事项5. 总结6. 编译异常处理在MapSt

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF