Vue入门【二】-- watch侦听器之普通监听与深度监听

2023-11-18

监听器(侦听器)

侦听器是vue提供的一个简便通用的响应数据变化的方法。

当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的 。

监听器的写法:  

  • 设有两个参数,一个是改变后的数据,一个是改变前的数据
a(newVal,oldVal){
					
				}
  • 在监听器中,被监听的变量除了可以写成函数,还可以是一个对象
要监听的变量名称:{
                    handler(){ 
      
                    }
                },

   // 其中handler是固定的配置选项,不能改变它的名称

 普通监听

普通监听只能监听到基本数据类型的变化,例如:number、boolean、string

用代码实现一个普通监听:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
	<script src="https://cdn.jsdelivr.net/npm/vue@2.7.10"></script>
</head>
<body>
	<div id="app">
		<input type="number" v-model.number="a">
		<input type="number" v-model.number="b">
		{{total}}
	</div>
	<script>
		new Vue({
			el:"#app",
			data:{
				a:0,
				b:0,
				total:0
			},
			watch: {
				a(newVal, oldVal){
					// console.log(newVal, oldVal,  '这是watch');
					this.total = this.a + this.b;
				},
				b(){
					this.total = this.a + this.b;
				}
			},
			methods:{}
		})
	</script>
</body>
</html>

 深度监听

当被监听的内容是引用数据类型时,watch里面msg(){ } 这种形式只是普通的浅监听,无法满足我们的需求,因此我们需要使用深度监听来实现对数组/对象里的值进行监听。给监听器添加一个deep属性,默认值是false,当我们将其设置为true时深度监听生效。

用代码实现一个深度监听:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
	<script src="https://cdn.jsdelivr.net/npm/vue@2.7.10"></script>
</head>
<body>
	<div id="app">
		<input type="number" v-model="a">
		<input type="number" v-model="b">
		<input type="text" v-model="obj.name">
	</div>
	<script>
		new Vue({
			el:"#app",
			data:{
				a:0,
				b:0,
				total:0,
				obj:{
					name:"zzy",
					age:17
				}
			},
			watch: {
				// 普通监听
				// 基本数据类型
				a(){
					console.log('a被改变了');
				},
				b:{
				// 被监听的变量除了可以写成函数,还可以是一个对象
				// handler是固定的配置选项,不能改变它的名称
				// 有两个参数,一个是新的数据,一个是旧的数据、
					handler(){
						console.log('b被改变了');
					}
				},
				// watch里面a(){}这种形式只是浅监听,只适合监听一层,
				// 如果想监听对象或者数组内部的值,这种形式就不适合了,
				// 这个时候需要深度监听,deep属性,它的默认值是false
				// 引用数据类型
				obj:{
					// console.log('obj被改变了');
					handler(newVal,oldVal){
						console.log(newVal.name,oldVal.name);
					},
					deep:true
				}
			},
			methods:{}
		})
	</script>
</body>
</html>

当实现了深度监听时,obj对象中的属性值也会随着我们的操作而发生变化。 

 注意:

  • handler: 固定方法触发. 侦听函数必须叫handler(必写)
  • deep: 开启深度侦听(必写)
  • immediate: 立即侦听(页面初始化时handler立即执行一次)

computed与watch的区别:

  1. 功能:computed是计算属性,watch是监听一个值的变化而执行对应的回调
  2. 是否调用缓存:computed函数所依赖的属性不变的时候会调用缓存;watch每次监听的值发生变化时候都会调用回调
  3. 是否调用return:computed必须有;watch可以没有
  4. 使用场景:computed当一个属性受多个属性影响的时候;例如购物车商品结算;watch当一条数据影响多条数据的时候,例如搜索框
  5. 是否支持异步:computed函数不能有异步;watch可以

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue入门【二】-- watch侦听器之普通监听与深度监听 的相关文章

  • 使用 jquery 淡入/淡出

    我正在研究我的学生项目 我是新的 jquery 对于该项目 我必须使用 jquery 来增强一些功能 并且我已经学到了很多来执行基本任务 但我陷入了一些非常令人困惑的事情 我的一个脚本实际上在鼠标悬停在功能上时更改了 div 容器的图像 功
  • 非常基本的 JS 编码,是否有 SoundManager2?

    我想在我的网站上包含一个具有以下属性的音频 可能的视频播放器 必须可通过 div 通过 CSS 设计样式 可以读取所有ID3信息 可以从数据库中提取文件 可能是 GoDaddy 的 Easy Database 无闪光 可转移至智能手机等 我
  • 使用 Javascript 实现 Tinder 风格的拖放手势?

    我正在尝试找出哪些库可以用于仅使用 Javascript 的 Tinder 风格拖放手势 需要创建一个响应拖动手势的 HTML 元素 触摸并按住时 允许元素跟随用户的手指移动 当用户移开手指时 该元素会 动画回到原来的位置 如果元素在释放时
  • 如何使用jquery格式化数字

    我正在尝试删除 之后的数字 然后我想格式化数字 16810900 211233 喜欢这个 16 810 900 但我不知道该怎么做 这是我的 html 是这样的 div class main p class active 10200 00
  • 如何在React-Native中选择ListView的一项?

    我是 React Native 的新手 我想使用 ListView 选择一项 当我第一次按下 item 时 ListView renderRow 被调用 但终究不起作用 我该如何修复这个错误 我的问题出在哪里 我写了一个演示here htt
  • 方向改变后的javascript最大视口高度Android和iOS

    目标 查找设备的最大视口高度 包括设备的空间address bar这样我们就可以动态调整 min body 的大小并将内容向上推 问题 移动浏览器处理方向状态的方式不同 方向变化时更新 DOM 属性的方式也不同 使用 JavaScript
  • 如何使用 Underscore 获取 JavaScript 数组中的重复项

    我有一个数组 我需要重复的项目并根据特定属性打印这些项目 我知道如何使用 underscore js 获取唯一项目 但我需要找到重复项而不是唯一值 var somevalue name john country spain name jan
  • 如何更改点击事件上的引导插入符指向方向

    我正在使用 2 3 2 引导程序 因为当我单击菜单按钮时 我可以更改插入符号图标的位置 我需要当我单击图标插入符号向上时 当您单击另一个项目时 插入符号返回到初始状态 这怎么可能 导航代码 div div class container d
  • 将 javascript 放在 header 之外有多糟糕?

    这个问题几乎已经说明了一切 我开始添加一些功能到我的周末项目 http www my clock net 对于我和几个朋友来说 这是一个小应用程序 因为我们是交换生 所以它对我们来说有点有用 但事情是这样的 我在 php 中执行此操作并使用
  • 如何垂直打印数组中的字符串元素? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个数组 我想垂直打印每个元素 例如 myArr abc def ghi 输出应该是 a d g b e h c f
  • 它们是“相同的”吗?代码大战

    这是完整的问题描述 给定两个数组 a 和 b 编写一个函数 comp a b Clojure 中的 compSame a b 来检查这两个数组是否具有 相同 元素以及相同的重数 这里 相同 意味着 b 中的元素是 a 平方中的元素 无论顺序
  • 上传前如何检查图片的宽度和高度

    对于图片上传 我编写了以下 html 代码
  • jQuery 如何通过不同的列值计算表中的行数

    如何按表列计算不同的表行 Example table thead tr th NAME th th TECHNOLOGY th tr thead tbody tr td john td td jQuery td tr tr td mark
  • 'DOMException:使用'option:selected'选择器时无法在'Element'上执行'querySelectorAll'

    我正在运行一个页面 该页面在以下行中引发错误 var label select find option selected html select find option first html 为了完整起见 这里是完整的 jQuery 函数
  • 如何在 Next.js 中正确使用 Mongoose 模型?

    我正在使用 TypeScript 和 MongoDB Mongoose 构建 Next js 应用程序 我在使用 Mongoose 模型时开始遇到错误 这导致它们在每次使用模型时都尝试覆盖模型 导致模型覆盖错误的代码 import mong
  • 单击时突出显示文本(javascript jquery html)

    当您在所有浏览器中双击某个单词时 它们会自动突出显示单击下的单词 但是否有可能找到一种方法exact单击一下就会发生同样的事情吗 我想这涉及到的事情可能是 TextRange 的东西 对所有段落 或整个正文或 div 的 onclick 做
  • 限制线的长度

    我正在尝试画一条代表 弹弓 的线 并且希望它具有最大拉伸长度 在 p5 中 我在位置和位置之间画了一条线 line posA x posA y posB x posB y posA 是鼠标 x 和 y posB 是画布上圆的位置 我想要做的
  • Modernizr 未将类应用于 html 标签

    我目前正在构建一个网站 我需要使用 Modernizr 但由于某种原因 它没有将类应用到 html 标签 因为它应该 我的代码如下所示
  • 检测图像是否损坏或损坏

    我需要以编程方式检查用户在我的应用程序上选择作为壁纸的图像是否已损坏或损坏 基本上我为用户提供了选择自己的图像作为壁纸的选项 现在 当图像加载时 我只想检查它是否已损坏 如果您正在寻找 PHP 解决方案而不是 javascript 解决方案
  • 在 Map() 的条目上使用 Promise.all

    我正在使用 Map 来表示一些键 值对 let myMap new Map myMap set foo bar myMap set foo2 bar42 对于每个 Map 条目 我执行一个返回 Promise 的函数 所有这些 Promis

随机推荐

  • 北大教授上课讲解,Python零基础入门总结

    一 输入输出 输出 print 100 200 100 200 print The quick brown fox jumps over the lazy dog The quick brown fox jumps over the laz
  • springWEB搭建

    概述 SpringWEB就是spring框架里得一个模块 SpringWeb的前身是SpringMVC springMVC介绍 在之前的后端三大架构 Controller 控制层 包含了servlet 对数据的接收 处理 响应 Model
  • 【华为OD机试真题2023B卷 JAVA&JS】找出两个整数数组中同时出现的整数

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 找出两个整数数组中同时出现的整数 知识点数组哈希表排序 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 现有两个整数数组 需要你找出两个数组中同时出现的整数 并按照如下
  • PR/AE 超级变速插件Twixtor Pro 7.5.4汉化版WIN版中文使用教程

    插件介绍 Twixtor Pro汉化版 hereitis cn articleDetails 897 可以直观的调整动画祯速率 加快或减慢 调整帧顺序 为了实现 的图像品质 Twixtor通过对原始连续的帧进行变形和插入来合成它独有的新帧
  • 【CVPR 2023】FasterNet论文详解

    论文名称 Run Don t Walk Chasing Higher FLOPS for Faster Neural Networks 论文地址 https arxiv org abs 2303 03667 作者发现由于效率低下的每秒浮点运
  • 全相联映射、直接映射、组相连映射

    目录 1 主存中的块放到cache 高速缓冲存储器 中哪个位置 2 标记位 有效位 命中是什么 2 1 标记位 2 2 有效位 2 3 命中 3 全相联映射 4 直接映射 4 1优化标记位 5 组相连映射 6 课后习题 1 主存中的块放到c
  • 726-有100瓶水,其中一瓶有毒,有一种试纸...

    问题如下 100瓶水 一瓶有毒 有一种试纸 不过需要一个小时才能出结果 问最少需要几片试纸才能在一小时内找到有毒的那一瓶 答案是 7 算法思路 本地解题方案类似于布隆过滤器的算法思路 参考我的博客 大数据查重 布隆过滤器 本题的思想就是 算
  • 企业进销存管理系统(一)

    该系统是典型的MIS 管理信息系统 主要包括创建并维护后台数据库和前端应用程序的开发两个方面 练习 一 系统分析 本节是对企业进销存管理系统进行系统的分析 其中包括需求分析和可行性分析 另外 在项目计划书中将详细地描述开发背景 团队和开发环
  • dede php调用指定文章,织梦标签调用:根据特定需求调用文章的标签代码

    1 相关文章调用标签 dede likeart titlelen 30 row 10 dede likeart 表示读取10条相关文章 标题长度30个字符 2 热点文章调用标签 dede arclist orderby click titl
  • 嵌入式工程师必备:MIPI CSI-2 接口协议

    低不了的只有档次 百家号03 1500 23 https baijiahao baidu com s id 1594891152373506133 wfr spider for pc 现代社会 竞争激烈 对于手机行业 更是如此 在优胜劣汰适
  • eclipse 离线安装checkStyle

    CheckStyle 安装 在网上看了很多博客 博客写的大多是在线安装的方式 但是在国内在线安装最大的问题就是网络 很多时候别人安的好 但是到了你这里就不行 ps 很气 但是你没办法 下面我介绍的是一种离线安装的方式 首先大家解压下载的安装
  • Echars 动态生成数据与为0的数据不显示(折线图)

    1 贴个效果图 2 讲个 自己的小思路 准备自己统计的数据 如下图 代码很简单 首先我们需要一个data data里面需要什么数据 1 每日的日期 2 每日日期对应的商品名称 3 每日日期对应的商品名称销售总数量 比如 goodsName
  • C++实现——两个大数相乘

    include
  • word2013,分成两栏后文字顺序混乱的问题

    word2013默认的分栏 在一个自然段跨越一页时 会把跨越的那一部分分成两半 而我们希望它们继续在左边待着 怎么办呢 博主找了很久 终于在百度知道的一个被折叠的答案里找到了方法 这个问题是word默认的分栏符的锅 只要将其删去即可 以wo
  • 1.2安装Ubuntu20.4系统

    在NUC上装Linux 安装linux 开机进入BIOS界面 把U盘启动放在第一位 不同主板进入BIOS方法不一样 不知道可自行百度 nuc是f2 注意 一定要保证开机之前U盘是插上去的 否则看不到U盘启动项 这里我安装的Ubuntu20
  • 种春草肥禾,织数字天下

    进入3月 和春天一起到来的 还有各行各业与数智科技相触碰后所显现的勃勃生机 我们知道 十三五期间 科技成为支撑中国高质量发展的 新动能 即便是在2020年疫情影响的不利环境下 许多高新技术企业依然实现了逆势增长 再叠加 新基建 双循环等政策
  • C++中的自定义排序

    目录 前言 sort介绍 自定义排序规则 方式一 直接写bool类型cmp函数 方式二 重载运算符 gt 或 lt 方式三 在sort的cmp函数直接写规则 前言 sort用于C 中 对给定区间所有元素排序 在算法题时经常会用到sort排序
  • TabLayout源码解析和仿简书首页TabLayout效果

    初衷 想学习下源码 刚好就拿TabLayout开刀 正好产品和UI提了需求做成简书那样的效果 本来是想自己写一个的 但是ondraw里面画了几个文字textview之后 觉得可能还是在TabLayout之上二次开发来的容易 1 TabLay
  • Android性能优化系列:如何合理使用内存

    文章目录 1 Android编译器 2 内存泄漏 3 内存抖动 4 引用 5 取消部分后台服务 6 数据类型 7 自动装箱 8 Sparse数组集 9 ArrayMap 10 循环 11 枚举 12 常量 静态变量 13 字符串 14 本地
  • Vue入门【二】-- watch侦听器之普通监听与深度监听

    监听器 侦听器 侦听器是vue提供的一个简便通用的响应数据变化的方法 当需要在数据变化时执行异步或开销较大的操作时 这个方式是最有用的 监听器的写法 设有两个参数 一个是改变后的数据 一个是改变前的数据 a newVal oldVal 在监