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 ...
随机推荐
- python笔记:第六章函数&方法
1.系统函数 由系统提供,直接拿来用或是导入模块后使用 a = 1.12386 result = round(a,2) print(result) > 1.12 2.自定义函数 函数是结构化编程 ...
- MySQL数据库的集群方案
读写分离结构(主从) 读多写少,也就是对数据库读取数据的压力比较大. 其中一个是主库,负责写入数据,成为写库:其他都是从库,负责读取数据,成为读库. 对我们的要求: 读库和写库的数据一致: 写数据必须 ...
- 你知道.NET的字符串在内存中是如何存储的吗?
毫无疑问,字符串是我们使用频率最高的类型.但是如果我问大家一个问题:"一个字符串对象在内存中如何表示的?",我相信绝大部分人回答不上来.我们今天就来讨论这个问题. 一.字符串对象的 ...
- React 前端应用中快速实践 OpenTelemetry 云原生可观测性(SigNoz/K8S)
OpenTelemetry 可用于跟踪 React 应用程序的性能问题和错误.您可以跟踪从前端 web 应用程序到下游服务的用户请求.OpenTelemetry 是云原生计算基金会(CNCF)下的一个 ...
- Java并发(十三)----共享存在的问题
1.小故事 老王(操作系统)有一个功能强大的算盘(CPU),现在想把它租出去,赚一点外快 小南.小女(不同的线程)来使用这个算盘来进行一些计算,并按照时间给老王支付费用 但小南不能一天24小时使用算盘 ...
- 渗透-02:HTTPS主干-分支和HTTPS传输过程
一.HTTPS主干-分支 第一层 第一层,是主干的主干,加密通信就是双方都持有一个对称加密的秘钥,然后就可以安全通信了. 问题就是,无论这个最初的秘钥是由客户端传给服务端,还是服务端传给客户端,都是明 ...
- html5 2.0学习
列表定义:是一种特别的对象集合.集合:集中在一起合二为一(聚集). 聚集:多个列(信息资源)排在一起.信息资源:一堆数据,可能是字符,可能是图片. 列表分类:有序列表 无序列表 (自)定义列表 有 ...
- Vue3 vite:is a JavaScript file. Did you mean to enable the 'allowJs' option?
描述 今天在vue3+vite下进行打包时,突然vscode报了一个error. 大概的意识是询问是否启用"allowJS"选项,因为该文件在程序内是指定用于编译的根文件. 提示信 ...
- Codeforces 1257D - Yet Another Monster Killing Problem
题意: 有\(n\)个怪物,每个怪物有攻击力\(a_i\)点:有\(m\)个英雄,每个英雄有攻击力\(p_i\)点,耐力\(s_{i}\)点. 怪物需要被依次杀死(按输入顺序). 每一天可以挑选一个英 ...
- Git命令详细使用指南
Git命令详细使用指南 Git是一种广泛使用的版本控制系统,它可以帮助开发人员跟踪变更.协作项目和有效管理代码仓库.无论你是初学者还是有经验的用户,理解各种Git命令对于高效的代码管理至关重要. 安装 ...