Vue:watch的多种使用方法
好家伙,
补了一下watch的多种用法
1.属性: 方法(最常用)
使用最广泛的方式是将watch选项设置为一个对象,对象的属性是要观测的数据属性,值是一个回调函数,该回调函数会在属性变化时触发。例如:
watch: {
firstName: function(newVal, oldVal) {
console.log('firstName changed:', newVal, oldVal);
}
}
2.属性: 数组
你可以在一个watch选项中观测多个数据属性,这可以通过将要观测的属性放入一个数组中来实现。例如:
watch: {
'person.firstName': function(newVal, oldVal) {
console.log('firstName changed:', newVal, oldVal);
},
'person.lastName': function(newVal, oldVal) {
console.log('lastName changed:', newVal, oldVal);
}
}
3.属性: 对象
另一种观测多个属性的方式是使用对象。在这种情况下,对象的键是要观测的属性,值是一个包含处理函数、handler的对象。
该处理函数与属性值的回调函数相同,用于在属性更改时执行组件中的逻辑。它还可以包含其他选项,例如deep和immediate。例如:
watch: {
person: {
handler: function(newVal, oldVal) {
console.log('person changed:', newVal, oldVal);
},
deep: true
}
}
4.属性:字符串
还可以使用字符串指定要观察的属性,然后使用对应的方法名称作为回调函数。这个选项在只有一个属性需要观察的情况下非常有用。例如:
watch: {
'person.firstName': 'firstNameChanged'
},
methods: {
firstNameChanged: function(newVal, oldVal) {
console.log('firstName changed:', newVal, oldVal);
}
}
5.带命名空间的watch
watch选项中可以使用字符串表示要观测的属性,可以使用.来访问对象中的属性,如'person.firstName',但是这样会导致处理函数与属性名称紧密耦合,不便于维护。
为了解决这个问题,Vue提供了一种带命名空间的watch用法,这可以通过在watch选项中使用对象来实现。
对象的每个键都代表一个观测的命名空间,值是观测该命名空间下属性的处理函数。例如:
watch: {
person: {
firstName: function(newVal, oldVal) {
console.log('firstName changed:', newVal, oldVal);
},
lastName: function(newVal, oldVal) {
console.log('lastName changed:', newVal, oldVal);
}
}
}
这里,我们可以为person对象指定两个命名空间—firstName和lastName,这些命名空间被视为person层次结构的子命名空间。
6.$watch
除了在组件选项中设置watch属性之外,Vue还允许你使用实例方法$watch来实现相同的效果。
与组件选项中设置的watch选项不同,调用$watch时可以在任何地方使用,例如在计算属性、方法或任何其他实例方法中。例如:
created() {
this.$watch('person.firstName', function(newVal, oldVal) {
console.log('firstName changed:', newVal, oldVal);
})
}
7.深度观测
在默认情况下,watch只会观测对象的第一层属性的变化。这意味着在对象的嵌套层次结构中更改属性时,不会触发处理函数。要观测对象的深层属性,可以在watch选项中使用deep属性,如下所示:
watch: {
'person.name': {
handler: function(newVal, oldVal) {
console.log('name changed:', newVal, oldVal);
},
deep: true
}
}
在这个例子中,我们观察person对象的name属性,使用deep: true选项在对象深层次结构中更改属性时仍然能够触发处理函数。
综上所述,Vue的watch选项提供了多种方法来观测数据属性的变化,让我们能够编写更加优雅和维护性更高的代码。
Vue:watch的多种使用方法的更多相关文章
- [转载]oracle 11g不能导出空表的多种解决方法
原文地址:11g不能导出空表的多种解决方法">oracle 11g不能导出空表的多种解决方法作者:Anlin_Yang ORACLE 11g 用exp命令导出库文件备份时,发现只能导出 ...
- Vue2.x源码学习笔记-Vue实例的属性和方法整理
还是先从浏览器直观的感受下实例属性和方法. 实例属性: 对应解释如下: vm._uid // 自增的id vm._isVue // 标示是vue对象,避免被observe vm._renderProx ...
- Vue(十二)vue实例的属性和方法
vue实例的属性和方法 1. 属性 vm.$el vm.$data vm.$options vm.$refs <!DOCTYPE html> <html lang="en& ...
- 在Vue中关闭Eslint 的方法
在vue项目中关闭ESLint方法:找到 webpack.base.conf.js 将这些代码注释掉, { test: /\.(js|vue)$/, loader: 'eslint-loader', ...
- vue解决遮罩层滚动方法
vue 遮罩层阻止默认滚动事件 在写移动端页面的时候,弹出遮罩层后,我们仍然可以滚动页面. vue中提供 @touchmove.prevent 方法可以完美解决这个问题 <div class=& ...
- vue实例的属性和方法
vue实例的属性和方法 1. 属性 vm.$el #指定要绑定的元素 vm.$data #Vue 实例的数据对象 vm.$options #获取自定义属性的值 new Vue({ customOpti ...
- Vue把父组件的方法传递给子组件调用(评论列表例子)
Vue把父组件的方法传递给子组件调用(评论列表例子) 效果展示: 相关Html: <!DOCTYPE html> <html lang="en"> < ...
- vue中添加util公共方法&&ES6之import、export
vue中添加util公共方法&&ES6之import.export https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Re ...
- vue中methods中的方法闭包缓存问题
vue中methods中的方法闭包缓存问题 问题背景 需求描述 在路由的导航栏中需要, 判断是否为第一次点击 需要一个标志位来记录是否点击过 现状: 这个标志位只在一个函数中用过.不希望存放全局 希望 ...
- js面向对象 多种创建对象方法小结
转自js面向对象 多种创建对象方法小结 1.对象字面量 var clock={ hour:12, minute:10, second:10, showTime:function(){ alert(th ...
随机推荐
- 使用Ajax进行数据请求
一.Ajax开源库有很多选择,大家可以根据需求自己选择 jQuery:jQuery是一个广泛应用的JavaScript库,它提供了简洁而强大的API来处理Ajax请求.通过$.ajax()方法或其 ...
- 【技术实战】Vue技术实战【一】
需求实战一 组件来源 ant-design-vue Button 按钮 Progress 进度条 效果展示 代码展示 <template> <ARow> <ACol> ...
- 如何在Spring Boot中记录用户系统操作流程?
在现代Web应用程序中,记录用户系统操作流程对于监控用户行为.进行故障排查.安全审计等方面都是非常重要的.在本篇博客中,我们将介绍如何在Spring Boot中使用AOP(面向切面编程)和日志框架来实 ...
- ABP VNext添加全局认证(如何继承AuthorizeFilter)
前言 目前公司采用的开发框架是ABP VNext微服务框架 最近突然发现一个问题,ABP中如果控制器或服务层没有加 Authorize特性的话,则不会走身份认证,且不会认证Token 如图: 但是项目 ...
- Echarts: 同时显示柱状图和前端
完整代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- 关于在Java中计算某个数的N次方注意事项
在实际过程中,我们会遇到计算某个数的N次方的情景,在书面上我们是可以记作 a^n ,然而在Java中我们却不能这样使用,因为在Java中,这样的写法是位运算,即 假设 A = 60, B = 13,他 ...
- 8 最全的零基础Flask教程
最全的零基础Flask教程 1 Flask介绍 1.1 为什么要使用Flask Django和Flask是Python使用最多的两个框架 1.2 Flask是什么 Flask诞生于2010年,是Arm ...
- pyqt5学习日记
前提需要pip安装PyQt5与PyQt5-tools 安装后会有qtdesigner.exe和pyuic5.exe,用everything直接可以搜索到 qtdesigner.exe是来设计ui的 p ...
- docker service 与 docker stack
转载请注明出处: 1. Docker Service Docker Service(服务)是用于定义和管理单个容器服务的概念.它是在Docker Swarm集群中运行的容器实例,可以使用docker ...
- ceph分布式存储软件pgs inconsistent
Ceph是一个开源的分布式存储系统,它提供了高性能.高可靠性以及高扩展性.Ceph的设计理念是基于对象存储模型,通过将数据分割成多个对象并存储在不同的节点上,实现数据的分布式存储和访问. Ceph的核 ...