Vue中使用watch监听的handler,immediate,deep属性

news/2024/9/12 15:06:54/文章来源:https://www.cnblogs.com/ggqq/p/18357107

Vue中使用watch监听的handler,immediate,deep属性

new Vue({el: '#app',data: {num: 0,sum:10,},watch: {// 只要num的值发生变化,sum的值就会变化  不用handler的简洁写法num(newValue, oldValue) {this.sum= newValue;}// 也可以使用handler方法写num:{handler(newValue, oldValue) {this.sum = newValue;}}} 
})

1.handler方法和immediate/deep属性

1.1.immediate属性

watch的特点就是,刚挂载的时候是不执行的,只有挂载完成后的变化才会执行。如果我们想要初次挂载的时候就执行,就需要用上immediate属性(immediate:true)

new Vue({el: '#app',data: {num: 0,sum:10,},watch: {// 只要num的值发生变化,sum的值就会变化num:{handler(newName, oldName) {this.sum= newName;},immediate: true,}} 
})

1.2.handler方法

这里可以看出添加了一个handler方法,其实watch的语法中是一直有这个handler方法的,只是没有添加immediate和deep属性的时候可以省略。

也可以把方法提炼到methods里面去

new Vue({el: '#app',data: {num: 0,sum:10,},watch: {// 只要num的值发生变化,sum的值就会变化num:{handler: function (newName, oldName) {this.sum= newName;},immediate: true,}} 
})
new Vue({el: '#app',data: {num: 0,sum:10,},methods:{numfun (newName, oldName) {this.sum= newName;}},watch: {// 只要num的值发生变化,sum的值就会变化num:{handler: 'numfun',//这里引用的是methods里面定义的方法名immediate: true,}} 
})

当watcher监听到变化的时候,可以同时调用多个方法

new Vue({el: '#app',data: {msg: {name: 'aaa',age: 12},    num: 0,sum: 10},methods:{numfun (newName, oldName) {this.sum= newName;},logLine () {console.log('----logLine ---')},logContent () {console.log('----logContent ---')}},watch: {// 只要num的值发生变化,sum的值就会变化msg:{handler: 'numfun',//这里引用的是methods里面定义的方法名immediate: true,},'msg.name': [ 'logLine ' , 'logContent ' ]//数组的方式可以调用多个方法} 
})

1.3.deep属性

当我们想监听一个对象中的某个属性的时候,比方说上面msg对象中的name属性。由于Vue会在初始化实例时对属性执行getter/setter转化过程,所以属性必须在data对象上存在才能让Vue转换它,这样才能让它是响应的。

默认情况下,handler只会监听对象的引用变化,我们只有给对象重新赋值的时候,它才会监听到。

那如何才能想听到对象的具体的一个属性了?这就是deep的作用。

new Vue({el: '#app',data: {num: 0,sum: 10,msg:{name:'aaa',        age: 12    }},watch: {// 只要num的值发生变化,sum的值就会变化num:{handler(newName, oldName) {this.sum= newName;},immediate: true,},msg:{handler(newValue){console.log('msg的name发生了变化')},deep: true, // 默认是false}} 
})

deep的意思就是深入观察,监听器会一层层的往下遍历,给对象(msg)的所有属性都加上这个监听器,但是这样性能开销会非常大,任何修改对象里面的任何一个属性都会触发这个监听

器里面的handler。

2.字符串形式的监听

如果我们只想监听对象(msg)的某个具体的属性的变化,不监听对象(msg)的其他属性,可以使用字符串形式的监听。

watch: {'msg.name':{handler(newValue){console.log('msg的name发生了变化')},immediate: true // 默认false//deep: true, // 默认是false}
}

这样Vue.js才会一层一层解析下去,知道遇到对象(msg)的属性(name)

3.watch监听路由器

watch: {'$route'(to,from){console.log(to);   //to表示去往的界面 变化后的路由console.log(from); //from表示来自于哪个界面  变化前的路由}}// 或者直接监听路由的属性path
watch:{'$route.path':function(newVal,oldVal){//console.log(newVal+"---"+oldVal);if(newVal === '/login'){console.log('欢迎进入登录页面');} else if(newVal === '/register'){console.log('欢迎进入注册页面');}}}

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

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

相关文章

vue---v-text和v-html绑定数据指令

<p><!-- v-text指令的写法 指令必须写在开始标签上,作为标签的属性存在<开始标签 v-text="data中的变量名"></结束标签>--><span v-text="msg"></span><!-- v-html的用法和v-text用法一直,只不过通过v-html引入的…

0223-IP 协议部分字段解释

环境Time 2022-11-20 WSL-Ubuntu 22.04 Rust 1.65.0 pnet 0.31.0 tun-tap 0.1.3前言 说明 参考:https://docs.rs/pnet/latest/pnet/index.html 参考:RFC 791 目标 上一篇已经看过了 IP 协议的一部分字段,这里继续了解剩下的部分。 main.rs use pnet::packet::ipv4::Ipv4Pack…

Apifox 深度分析:为什么它是不可错过的 API 管理平台

无论是大型企业还是初创公司,高效的 API 管理都是确保业务顺利运行的重要环节。然而,随着项目规模的扩大和团队的壮大,API 的设计、开发、测试和文档管理往往变得越来越复杂。无论是大型企业还是初创公司,高效的 API 管理都是确保业务顺利运行的重要环节。然而,随着项目规…

通过这五个问题,带你深入了解中国式报表

一、什么是中国式报表? 中国式报表,顾名思义具有中国特色的报表,通常指的是中国企业/机构在财务和业务报告方面的特有风格和规范。二、中国式报表有什么特点? 一句话就可以概括中国式报表:结构复杂、数据量大的一种报表。 格式复杂:为了能够展示更为详尽的数据分类和汇总…

unity2022.3.9+Pico更换渲染管线后打包,人物材质不可显示问题

为了解决字体和场景闪烁问题吗,更换渲染管线 旧项目管线是URP 新的项目管线是内置管线 build in()内置管线需要设置两个地方,可以解决人物材质不显示问题 1.PICO-Stereo Rendering Mode 选择 Multi Pass 模式 2,Player-OtherSetting-Auto Graphics API勾选 (注:项目中…

变电站弱电系统集成常见设备

"名称" 规格型号质量技术标准 不间断电源 UPS 输入 220VAC 96VDC/输出 220VAC/容量≥20kVA蓄电池 " UPS 功能 6000W 13 度 1200 万毫安 立式/磷酸铁锂"开关柜储能电机 DC48V/永磁直流电动机开关柜储能电机 DC110V/永磁直流电动机EPS 逆变器 " …

猪脸识别、自动投喂!Apache DolphinScheduler还能做这些?

数字化转型提速中!传统农牧食品行业也寻求搭上数字化转型的快车,通过物联网、大数据、人工智能等现代信息技术,实现生产、加工、流通等环节的智能化和自动化,提高生产效率、优化资源配置、提升产品质量,并满足消费者对食品安全和可追溯性的需求。 在数字化浪潮的推动下,铁…

【YashanDB数据库】YashanDB如何回收表空间

确认表空间高水位线,是否有可回收空间。 select a.tablespace_name,a.high_water_mark,b.user_bytes,b.total_bytes from (SELECT tablespace_name, max(header_block+blocks) * 8192 AS high_water_mark FROM dba_segments WHERE tablespace_name = USERS GROUP BY tablespac…

支付宝当面付快速接入网页h5

支付宝当面付快速接入网页h5第一步开放平台申请 网页应用,下载 支付宝开放平台密钥工具 V2.0.3 选择生成【证书】【RSA2】 应用开发设置 【接口加签方式(密钥/证书)】 上传 ,私钥在本地已经生成,其他3个crt应用申请上传CSR文件.csr 后下载即可| appPrivateKey: appPu…

PbootCMS上传图片被压缩怎么解决

PbootCMS上传图片被压缩怎么解决pb默认是大于1000宽或者高的,自动压缩,所以图片质量损失了,想解决这个,直接打开根目录config文件夹下的config.php和core文件夹下的convention.php,然后找到ico => array(把max_width跟max_height参数调大即可。扫码添加技术【解决问题…

pbootcms网站sqlite转mysql工具转换数据库导入后,出现错误

sqlite转mysql工具转换数据库导入后,出现错误。这是因为工具对应的是2X的版本,3X存在错误,尤其是对默认值处理不好,可以将gtype的默认值删掉即可。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承…

PbootCMS默认搜索搜不到产品及其余内容怎么办

PbootCMS默认搜索搜不到产品及其余内容怎么办 这种是搜索search.html的scode限定了,可以修改search.html下面有个调用标签的scode为scode=0。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业…