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

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

监听器(侦听器)

侦听器是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可以

 

相关文章:

  • 机器人地面站-[QGroundControl源码解析]-[6]-[AnalysizeView2]
  • FFmpeg入门详解之34:FFmpeg应用之视频播放器
  • 2022牛客多校(九)
  • Java常用类
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • aarch64服务器-部署mysql
  • PDF转为网页文件怎么转?这篇文章告诉你
  • Java 基本数据类型-包装类-String的相互转换(总结+代码实现)
  • JUC并发编程
  • Spring注解驱动系列总结
  • 记一次mysql 命令行登录报错(error while loading shared libraries: libssl.so.1.1)
  • PyTorch中DataLoader及其与enumerate()用法介绍
  • mac 使用 PyQt5 和 py_designer 搭建窗体
  • 嵌入式SQL开发
  • 对于HTTP协议,什么是长连接和短连接?
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【React系列】如何构建React应用程序
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • C学习-枚举(九)
  • Electron入门介绍
  • EventListener原理
  • javascript 哈希表
  • JavaScript 基础知识 - 入门篇(一)
  • java多线程
  • Lucene解析 - 基本概念
  • Material Design
  • Netty 4.1 源代码学习:线程模型
  • OSS Web直传 (文件图片)
  • overflow: hidden IE7无效
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • PHP那些事儿
  • python docx文档转html页面
  • Python利用正则抓取网页内容保存到本地
  • Python十分钟制作属于你自己的个性logo
  • Python学习之路16-使用API
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • WePY 在小程序性能调优上做出的探究
  • 二维平面内的碰撞检测【一】
  • 关于springcloud Gateway中的限流
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 说说动画卡顿的解决方案
  • 听说你叫Java(二)–Servlet请求
  • 消息队列系列二(IOT中消息队列的应用)
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #大学#套接字
  • $L^p$ 调和函数恒为零
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (+4)2.2UML建模图