Vue之监视属性(watch)

news/2024/11/15 7:02:40/

文章目录

  • 前言
  • 一、监视属性
    • 1.介绍
    • 2.实例
  • 二、深度监视
    • 1.实例一
    • 2.实例二
    • 3.结论
  • 三、监视器简写
  • 总结


前言

监视属性


一、监视属性

1.介绍

  1. 当被监视的属性变化时,回调函数自动调用,进行相关操作
  2. 监视的属性必须存在,才能进行监视!
  3. 监视的两种写法:
    (1) Vue实例化对象内watch配置
    (2)通过Vue实例(假设是vm)vm.$watch监视

2.实例

天气小案例:点击”切换天气“按钮,文字在”炎热“和”凉快“之间切换。
代码如下:

<!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 type="text/javascript" src="../js/vue.js"></script>
</head><body><div id="root"><h2>今天天气很{{info}}</h2><button @click="change">切换天气</button></div><script>var vm = new Vue({el: "#root",data: {ishot: true},methods: {change() {this.ishot = !this.ishot}},computed: {info() {return this.ishot ? '炎热' : '凉快'}},watch: {immediate:true,//初始化时让handler调用一下info: {handler(newValue, oldValue) {console.log("info被修改了", newValue, oldValue);}}}})</script>
</body></html>

然后点击按钮,天气由最开始的”炎热”变成“凉快”,并且watch监视info属性,并且在控制台打印了info变化前后的值(handler函数第一个参数newValue是改变后的值,第二个oldValue是改变前的值)。(watch里的handler在监视属性发生变化时触发)
在这里插入图片描述

在这里插入图片描述
另一中写法,代码如下:

<!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 type="text/javascript" src="../js/vue.js"></script>
</head><body><div id="root"><h2>今天天气很{{info}}</h2><button @click="change">切换天气</button></div><script>var vm = new Vue({el: "#root",data: {ishot: true},methods: {change() {this.ishot = !this.ishot}},computed: {info() {return this.ishot ? '炎热' : '凉快'}},})vm.$watch('info', {immediate: true, //初始化时让handler调用一下handler(newValue, oldValue) {console.log("info被修改了", newValue, oldValue);}})</script>
</body></html>

二、深度监视

1.实例一

监视多级结构中的某个属性
(监视number对象中的a,b的值)
代码如下(示例):

<!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 type="text/javascript" src="../js/vue.js"></script>
</head><body><div id="root"><h3>{{numbers.a}}</h3><br><button @click="numbers.a++">点我a+1</button><br><h3>{{numbers.b}}</h3><br><button @click="numbers.b++">点我b+1</button><br></div><script>var vm = new Vue({el: "#root",data: {numbers: {a: 1,b: 1}},watch: {'numbers.a': {handler() {console.log("a被改变");}},'numbers.b': {handler() {console.log("b被改变");}}}})</script>
</body></html>

在这里插入图片描述

2.实例二

监视多级结构中的所有属性
(监视number对象)
代码如下(示例):

<!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 type="text/javascript" src="../js/vue.js"></script>
</head><body><div id="root"><h3>{{numbers.a}}</h3><br><button @click="numbers.a++">点我a+1</button><br><h3>{{numbers.b}}</h3><br><button @click="numbers.b++">点我b+1</button><br></div><script>var vm = new Vue({el: "#root",data: {numbers: {a: 1,b: 1}},watch: {numbers: {deep: true,handler() {console.log("numbers改变了");}}}})</script>
</body></html>

在这里插入图片描述

3.结论

  • Vue实例对象中的watch默认不监测对象内部值的改变(一层)
  • 配置deep:true可以监测对象内部值改变(多层)
  • Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以
  • 使用watch时根据数据的具体结构,决定是否采用深度检测

三、监视器简写

简写条件:没有immediate,deep
代码如下:

<!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 type="text/javascript" src="../js/vue.js"></script>
</head><body><div id="root"><h2>今天天气很{{info}}</h2><button @click="change">切换天气</button></div><script>var vm = new Vue({el: "#root",data: {ishot: true},methods: {change() {this.ishot = !this.ishot}},computed: {info() {return this.ishot ? '炎热' : '凉快'}},watch: {info(newValue, oldValue) {console.log("info改变了", newValue, oldValue);}}})</script>
</body></html>

总结

以上就是监视属性


http://www.ppmy.cn/news/801718.html

相关文章

松下GH5相机SD卡格式化后MP4视频碎片重组数据恢复方法

松下相机GH5相机拍摄用的SD卡&#xff0c;一时大意素材没有导出就用电脑把SD卡格了&#xff0c;卡大小为64G&#xff0c;格式化后并没有写入任何数据。下载了数据恢复软件&#xff0c;但是恢复出来要么找不到视频&#xff0c;要么找到的视频格式不对&#xff0c;大小不对。 注…

《土耳其瞭望塔》背后的故事

欢迎关注苏南下 分享视频创作、摄影和旅行相关内容 仅用一部相机拍出的神片。 如果你喜欢旅行和摄影的话&#xff0c;可能看过一部叫《Watchtower of Turkey》&#xff08;以下简称《土耳其瞭望塔》&#xff09;的短片。 Watchtower of Turkey 如果没看过&#xff0c;可以点击下…

Java 生成二维码(带logo 文字)

1. 引入包 <!-- 二维码生成--><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.0</version></dependency> 2. 工具类 import cn.hutool.core.codec.Base64; import …

早教机器人刷固件_你刷机身我刷固件 松下绕身一变为6K视频机

刷固件修正Bug,刷机身升级相机,这是相机圈一贯套路,即使富士、索尼近年不断通过升级固件赋予相机新功能也没有从根本上改变此次套路。不过松下想在GH5在一些改变,继 4月份固件赋予GH5 1080P V-log视频,9月底将发布Ver2.0固件,把GH5变成一台6K视频机。 首台6K相机 GH5采用…

python 按大小切割多进程安全文件日志concurrent_log_handler.ConcurrentRotatingFileHandler性能很差

nb_log_file_handler multi process safe log file handler,both time and size rotate&#xff0c;benchmark fast than concurrent_log_handler 100 times nb_log_file_handler 是多进程安全切割&#xff0c;同时按时间和大小切割的FileHandler,性能远超 concurrent_log_ha…

Spring 与 Servlet-2

学习笔记&#xff08;加油呀&#xff09;&#xff1a; Spring的通知类型 Spring 通知类型按切面功能调用的不同时刻&#xff0c;可以分为提供了 5 种 Advice 类型 1、前置通知 Before advice&#xff1a;在某连接点之前执行的通知&#xff0c;但这个通知不能阻止连接点之前的…

iOS 判断机型是否为iPhone Xs Max

添加如下宏&#xff1a; #define IsiPhoneXSMax ([UIScreen instancesRespondToSelector:selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) : NO)

基于simulink使用基本形态运算符进行对象计数(附源码)

一、前言 此示例演示如何使用基本形态运算符从视频流中提取信息。在这种情况下&#xff0c;模型会计算每个视频帧中的订书钉数量。请注意&#xff0c;每个视频帧中的焦点和照明都会发生变化。 二、模型 下图显示了对象计数模型。 三、计数订书钉子系统 该模型使用顶帽块来消…