Vue2 监听器 watcher

文章目录

  • 前言
  • 监听器的作用:
  • 工作流程:
  • 基本用法
    • 1. 简单监听
    • 2. 对象形式配置
  • 使用场景
    • 1. 执行异步操作
    • 2. 监听路由变化
    • 3. 复杂对象/数组变化
  • 关键配置项
  • 与计算属性的区别
  • 动态添加监听器
  • 注意事项


前言

提示:这里可以添加本文要记录的大概内容:

Vue 的 watch 选项用于观察和响应 Vue 实例上的数据变化,可以知道最新数据是多少,以及以前数据是多少,也可以提高调试数据。当需要在数据变化时执行 异步操作复杂逻辑 时,监听器非常有用。


提示:以下是本篇文章正文内容,下面案例可供参考

watch: {visible () { // 监听 visible 属性的变化if (this.visible ) { // 当 visible 变为 true 时this.loadData(); // 触发数据加载,(例如发起 API 请求、更新状态等)}}
}

监听器的作用:

  1. 监听 visible 属性:当组件的 visible 属性发生变化时(比如通过 show() 方法设置为 true 打开抽屉时),触发回调函数。
  2. 触发数据加载:当 visible 变为 true 时(抽屉可见),调用 loadData() 方法加载部门权限树的数据。

工作流程:

  • 当用户点击打开抽屉时,visible 被设为 true
  • 监听器检测到 visible 的变化,执行 if (this.visible) 判断。
  • 条件满足时调用 this.loadData(),向后端请求部门权限树数据并渲染到界面上。

这个监听器确保了每次打开抽屉时,都会重新加载最新的权限数据,而不是缓存旧数据。

基本用法

1. 简单监听

new Vue({data: {message: 'Hello'},watch: {// 监听 message 的变化message(newVal, oldVal) {console.log(`新值: ${newVal}, 旧值: ${oldVal}`);}}
})

2. 对象形式配置

watch: {message: {handler(newVal, oldVal) {// 处理逻辑},immediate: true,  // 立即触发一次deep: true        // 深度监听}
}

使用场景

1. 执行异步操作

watch: {searchQuery(newVal) {// 输入框搜索时,防抖请求接口clearTimeout(this.timer);this.timer = setTimeout(() => {this.fetchResults(newVal);}, 500);}
}

2. 监听路由变化

watch: {'$route'(to, from) {// 路由变化时重新加载数据this.loadData(to.params.id);}
}

3. 复杂对象/数组变化

watch: {userInfo: {handler(newVal) {console.log('用户信息发生深度变化');},deep: true}
}

关键配置项

配置项类型说明
handlerFunction监听到变化时的回调函数
immediateBoolean是否在初始化时立即触发一次回调(默认 false)
deepBoolean是否深度监听对象/数组内部变化(默认 false)

与计算属性的区别

watchcomputed
目的监听数据变化执行操作基于依赖值计算新值
缓存无缓存有缓存(依赖不变不重新计算)
异步支持支持不支持
适用场景数据变化时需要执行副作用(如请求接口)模板中需要动态计算显示值

最佳实践

  1. 优先使用计算属性
    如果只是需要根据数据生成新值,优先使用 computed

  2. 避免深度监听的滥用
    深度监听(deep: true)会遍历对象所有属性,对性能有影响

  3. 及时取消监听
    对于手动添加的监听器(vm.$watch),在组件销毁时要手动取消:

   created() {this.unwatch = this.$watch('data', handler);},beforeDestroy() {this.unwatch();}
  1. 对象监听优化
    如果只需要监听对象的某个属性,可以用字符串路径:
   watch: {'obj.prop'(newVal) {// 监听 obj.prop 的变化}}

动态添加监听器

通过 vm.$watch 动态添加:

mounted() {const unwatch = this.$watch('dynamicData',(newVal) => {console.log('动态添加的监听器');},{ deep: true });// 保存取消函数以便后续销毁this.unwatchDynamic = unwatch;
}

注意事项

  • 数组变更检测
    Vue 无法检测通过索引直接修改数组项(如 arr[0] = newVal),需使用 Vue.setsplice

  • 对象属性添加
    直接给对象添加新属性不会被检测到,需使用 Vue.set

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统程序设计:从入门到高级Day02

这一篇 我带大家复习一下,C语言中的文件 那一部分 大家注意 这里的图并非原创 是当时我老师的图片 本片作用主要是 后续会有文件相关操作,这篇帮大家复习C语言文件中的内容 有助于大家后面的理解。 文章中代码大多是图片格式,是因为这是我…

N元语言模型的时间和空间复杂度计算

对于N元语言模型,时间复杂度是O(V ^ {N-1}),空间复杂度是O(V ^ {N}),N是词汇表的大小。 空间复杂度:存储所有可能的N-1元组及其对应的词的频次需要大量的存储空间。例如,对于一个三元模型(N3)&…

Tmux 核心操作速查指南

Tmux 最常用操作笔记 1. 基本概念 会话(Session):一个tmux会话可以包含多个窗口,适合长期任务管理。窗口(Window):每个窗口是一个独立的终端界面,可包含多个面板。面板&#xff08…

哈希表系列一>两数之和

目录 题目:方法:暴力代码:优化后代码: 题目: 链接: link 方法: 暴力代码: public int[] twoSum(int[] nums, int target) {解法一:暴力解法:int n nums.length;for(int…

端到端机器学习流水线(MLflow跟踪实验)

目录 端到端机器学习流水线(MLflow跟踪实验)1. 引言2. 项目背景与意义2.1 端到端机器学习流水线的重要性2.2 MLflow的作用2.3 工业级数据处理需求3. 数据集生成与介绍3.1 数据集构成3.2 数据生成方法4. 机器学习流水线与MLflow跟踪4.1 端到端机器学习流水线4.2 MLflow跟踪实验…

英语学习:读科技论文的难处

如果读起科技论文, 我们就知道自己到底欠缺什么知识了, 那是一个挨着一个的缺。 而且还没有维基百科可用。 怎么办?没办法!硬看! 而且还要面临语言的差异性困难。比如这一句怎么翻译比较合适?还是直接不翻译…

001 使用单片机实现的逻辑分析仪——吸收篇

本内容记录于韦东山老师的毕设级开源学习项目,含个人观点,请理性阅读。 个人笔记,没有套路,一步到位,欢迎交流! 00单片机的逻辑分析仪与商业版FPGA的逻辑分析仪异同 对比维度自制STM32逻辑分析仪商业版逻…

基数排序算法解析与TypeScript实现

基数排序(Radix Sort)是一种高效的非比较型整数排序算法,通过逐位分配与收集的方式实现排序。本文将深入解析其工作原理,并给出完整的TypeScript实现。 一、算法原理 1. 核心思想 多关键字排序:将整数按位数切割成不同…

最新全开源码支付系统,赠送3套模板

最新全开源码支付系统,赠送3套模板 码支付是专为个人站长打造的聚合免签系统,拥有卓越的性能和丰富的功能。它采用全新轻量化的界面UI 让您能更方便快捷地解决知识付费和运营赞助的难题,同时提供实时监控和管理功能,让您随时随地…

PHP基础二【变量/输出/数据类型/常量/字符串/运算符】

PHP基础二 1. PHP变量2. PHP输出3. 数据类型3.1 字符串3.2 整型3.3 浮点型3.4 布尔型3.5 数组3.6 对象3.7 NULL3.8 资源类型3.9 类型比较 4. 常量5. 运算符 1. PHP变量 1. 我们来看一个实例&#xff1a; <?php$x 5;$y 6;$z $x $y;echo $z; // echo 是输出&#xff0c;…

ue5 仿鬼泣5魂类游戏角色和敌人没有碰撞

UE5系列文章目录 文章目录 UE5系列文章目录前言一、问题原因二、设置碰撞2.读入数据 总结 前言 ue5 仿鬼泣5魂类游戏角色和敌人没有碰撞 一、问题原因 在UE5中&#xff0c;角色和敌人没有碰撞可能是由多种原因导致的&#xff0c;以下是一些可能的原因及解决方法&#xff1a…

《AdaBoost:从弱分类器到强模型的进化之路》

目录 1. AdaBoost 的核心思想 2. AdaBoost 的关键步骤 步骤 1&#xff1a;初始化样本权重 步骤 2&#xff1a;迭代训练弱分类器 步骤 3&#xff1a;组合弱分类器 3. 用例子详解 AdaBoost 数据集&#xff1a; 迭代过程&#xff1a; 第1轮&#xff08;t1&#xff09;&am…

Android Settings 有线网设置界面优化

Android Settings 有线网设置界面优化 文章目录 Android Settings 有线网设置界面优化一、前言二、简单修改1、修改的EthernetSettings代码&#xff1a;2、有线网ip获取代码&#xff1a;3、AndroidManifest.xml定义有线网的Activity4、修改后界面&#xff1a; 三、其他1、有线网…

基于web的生产过程执行管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着世界经济信息化、全球化的到来和电子商务的飞速发展&#xff0c;推动了很多行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、畅通、高效的线上管理系统。当前的生产过程执行管理存在管理效率…

XSS 攻击风险与防御实践

✅ 框架与 XSS 防护概况 框架是否默认转义高危场景建议防御措施React✅ 是使用 dangerouslySetInnerHTML避免使用&#xff0c;必要时做内容清洗Vue.js✅ 是使用 v-html避免使用&#xff0c;或使用 DOMPurify 清洗Angular✅ 是使用 innerHTML、bypassSecurityTrustHtml谨慎绕过…

Cesium 时间线 及 坐标转换

文章目录 Cesium 基础理解&#xff08;二&#xff09;TimeLine & Clock 应用场景核心代码实例及解释代码解释 Cesium 之 实体动画构建实体动画的技巧1. 利用时间属性2. 组合动画效果3. 使用动画曲线 优化点1. 减少属性更新频率2. 优化实体数量3. 合理使用材质和纹理 注意事…

ngx_regex_init

定义在 src\core\ngx_regex.c void ngx_regex_init(void) { #if !(NGX_PCRE2)pcre_malloc ngx_regex_malloc;pcre_free ngx_regex_free; #endif } NGX_PCRE21 #if !(NGX_PCRE2) 就为假 条件不成立 ngx_regex_init 函数就成了空实现 NGX_PCRE2 被定义&#xff0c;则表示 Ngin…

第二期:深入理解 Spring Web MVC [特殊字符](核心注解 + 进阶开发)

前言&#xff1a; 欢迎来到 Spring Web MVC 深入学习 的第二期&#xff01;在第一期中&#xff0c;我们介绍了 Spring Web MVC 的基础知识&#xff0c;学习了如何 搭建开发环境、配置 Spring MVC、编写第一个应用&#xff0c;并初步了解了 控制器、视图解析、请求处理流程 等核…

一文读懂数据仓库:从概念到技术落地

数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。以下是关于数据仓库的详细介绍&#xff1a; 一、特点 面向主题&#xff1a;数据仓库围绕特定主题组织数据&#xff0c;如客户、产品、销售等&#xff0c;而不是像传统数…

JavaScript学习18-css操作和事件处理程序(html/DOM0/DOM2)

一、css操作 第一种&#xff1a;容易出错 第二种&#xff1a;有效避免错误 第三种&#xff1a; 二、事件处理程序 1.HTML事件 2.DOM0级事件处理 3.DOM2级事件处理