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侦听器之普通监听与深度监听 的相关文章

  • 在 HTML5 Javascript 中将 BlobBuilder 转换为字符串

    function blobToString blob var reader new FileReader var d reader onloadend function d callback reader result console lo
  • Jquery 悬停卡

    我在用着http designwithpc com Plugins Hovercard http designwithpc com Plugins Hovercard 但我不知道如何在悬停卡上声明 var 每个工作描述都有自己的 ID 当悬
  • 显示具有多个父代的 D3 树

    我目前有this http bl ocks org mbostock 4339083图已实现 我希望在描述具有多个父节点的子节点时保持结构和可折叠性 有没有办法做到这一点 我研究了力图 但我也想保留一组层次结构 这意味着 1 级的父级可以有
  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • VueJS 中数据无法正确显示

    我的 VueJS 代码有一个小问题 在 输出 压缩的 GS1 数字链接 URI 部分中 When there is no result it should have nothing display like this I have remo
  • jQuery .push 到 .get 调用中的数组给出空结果

    谁能告诉我为什么下面给我一个空字符串 当我console log contentArray in the get 回调函数它显示数据 但是当我尝试在下面的代码中执行它时 结果为空 sectionArray contentArray func
  • .push() 将多个对象放入 JavaScript 数组中返回“未定义”

    当我将项目添加到beats数组然后console log用户时 我得到了数组中正确的项目数 但是当我检查 length 时 我总是得到 1 尝试调用索引总是会给我 未定义 如下所示 Tom beats 1 我想我错过了一些明显的东西 但这让
  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • 如何使用有角度的材料创建卡片网格?

    我正在尝试使用 ng repeat 创建每行三张卡片的网格 我有一个普通的 javascript 对象数组附加到范围 下面的代码将为每张卡创建一个新行 div div
  • Number.IsNaN() 比 isNaN() 更糟糕吗

    Soooooo isNaNJavaScript 显然被破坏了 比如 isNaN isNaN isNaN true isNaN false isNaN 0 返回 false 当它们看起来都是 不是数字 在 ECMAScript 6 中 草案包
  • 通过 JavaScript 获取表单名称

    我有一个简单的问题 但我在网上找不到好的解决方案 我有这个 HTML 代码
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • javascript 选择自定义光标 (svg)

    我正在动态地将光标更改为悬停时的本地 svg element on mouseover function this css cursor url svgs pointer svg 9 30 auto 工作正常 但我想选择该 svg 来操纵其
  • JavaScript推送函数中的动态变量

    我在 JavaScript 中使用推送功能 var chartData for var i 0 i lt 3 i chartData push date new Date year s mon s date s hr s min s sec
  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J
  • Highcharts jQuery 渲染问题 - 所有浏览器

    我在尝试使用构建堆积柱形图时遇到了一个奇怪的问题高图表 http www highcharts com 当图表呈现时 在您调整浏览器大小之前 不会显示列无论如何 导致图表重绘 我认为 图表的其余部分显示 轴 标题等 但不显示列本身 我在 I
  • 如何从 json 文件创建模型? (ExtJS)

    这是我想使用 json 文件创建的模型 Ext define Users extend Ext data Model fields name user id type int name user name type string 为了根据服
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u

随机推荐

  • 北大教授上课讲解,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 在监