好家伙,

补了一下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的对象。

该处理函数与属性值的回调函数相同,用于在属性更改时执行组件中的逻辑。它还可以包含其他选项,例如deepimmediate。例如:

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对象指定两个命名空间—firstNamelastName,这些命名空间被视为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的多种使用方法的更多相关文章

  1. [转载]oracle 11g不能导出空表的多种解决方法

    原文地址:11g不能导出空表的多种解决方法">oracle 11g不能导出空表的多种解决方法作者:Anlin_Yang ORACLE 11g 用exp命令导出库文件备份时,发现只能导出 ...

  2. Vue2.x源码学习笔记-Vue实例的属性和方法整理

    还是先从浏览器直观的感受下实例属性和方法. 实例属性: 对应解释如下: vm._uid // 自增的id vm._isVue // 标示是vue对象,避免被observe vm._renderProx ...

  3. Vue(十二)vue实例的属性和方法

    vue实例的属性和方法 1. 属性 vm.$el vm.$data vm.$options vm.$refs <!DOCTYPE html> <html lang="en& ...

  4. 在Vue中关闭Eslint 的方法

    在vue项目中关闭ESLint方法:找到 webpack.base.conf.js 将这些代码注释掉, { test: /\.(js|vue)$/, loader: 'eslint-loader', ...

  5. vue解决遮罩层滚动方法

    vue 遮罩层阻止默认滚动事件 在写移动端页面的时候,弹出遮罩层后,我们仍然可以滚动页面. vue中提供 @touchmove.prevent 方法可以完美解决这个问题 <div class=& ...

  6. vue实例的属性和方法

    vue实例的属性和方法 1. 属性 vm.$el #指定要绑定的元素 vm.$data #Vue 实例的数据对象 vm.$options #获取自定义属性的值 new Vue({ customOpti ...

  7. Vue把父组件的方法传递给子组件调用(评论列表例子)

    Vue把父组件的方法传递给子组件调用(评论列表例子) 效果展示: 相关Html: <!DOCTYPE html> <html lang="en"> < ...

  8. vue中添加util公共方法&&ES6之import、export

    vue中添加util公共方法&&ES6之import.export https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Re ...

  9. vue中methods中的方法闭包缓存问题

    vue中methods中的方法闭包缓存问题 问题背景 需求描述 在路由的导航栏中需要, 判断是否为第一次点击 需要一个标志位来记录是否点击过 现状: 这个标志位只在一个函数中用过.不希望存放全局 希望 ...

  10. js面向对象 多种创建对象方法小结

    转自js面向对象 多种创建对象方法小结 1.对象字面量 var clock={ hour:12, minute:10, second:10, showTime:function(){ alert(th ...

随机推荐

  1. python笔记:第六章函数&方法

    1.系统函数 由系统提供,直接拿来用或是导入模块后使用 a = 1.12386 result = round(a,2) print(result) > 1.12 2.自定义函数 函数是结构化编程 ...

  2. MySQL数据库的集群方案

    读写分离结构(主从) 读多写少,也就是对数据库读取数据的压力比较大. 其中一个是主库,负责写入数据,成为写库:其他都是从库,负责读取数据,成为读库. 对我们的要求: 读库和写库的数据一致: 写数据必须 ...

  3. 你知道.NET的字符串在内存中是如何存储的吗?

    毫无疑问,字符串是我们使用频率最高的类型.但是如果我问大家一个问题:"一个字符串对象在内存中如何表示的?",我相信绝大部分人回答不上来.我们今天就来讨论这个问题. 一.字符串对象的 ...

  4. React 前端应用中快速实践 OpenTelemetry 云原生可观测性(SigNoz/K8S)

    OpenTelemetry 可用于跟踪 React 应用程序的性能问题和错误.您可以跟踪从前端 web 应用程序到下游服务的用户请求.OpenTelemetry 是云原生计算基金会(CNCF)下的一个 ...

  5. Java并发(十三)----共享存在的问题

    1.小故事 老王(操作系统)有一个功能强大的算盘(CPU),现在想把它租出去,赚一点外快 小南.小女(不同的线程)来使用这个算盘来进行一些计算,并按照时间给老王支付费用 但小南不能一天24小时使用算盘 ...

  6. 渗透-02:HTTPS主干-分支和HTTPS传输过程

    一.HTTPS主干-分支 第一层 第一层,是主干的主干,加密通信就是双方都持有一个对称加密的秘钥,然后就可以安全通信了. 问题就是,无论这个最初的秘钥是由客户端传给服务端,还是服务端传给客户端,都是明 ...

  7. html5 2.0学习

    列表定义:是一种特别的对象集合.集合:集中在一起合二为一(聚集). 聚集:多个列(信息资源)排在一起.信息资源:一堆数据,可能是字符,可能是图片. 列表分类:有序列表 无序列表  (自)定义列表  有 ...

  8. Vue3 vite:is a JavaScript file. Did you mean to enable the 'allowJs' option?

    描述 今天在vue3+vite下进行打包时,突然vscode报了一个error. 大概的意识是询问是否启用"allowJS"选项,因为该文件在程序内是指定用于编译的根文件. 提示信 ...

  9. Codeforces 1257D - Yet Another Monster Killing Problem

    题意: 有\(n\)个怪物,每个怪物有攻击力\(a_i\)点:有\(m\)个英雄,每个英雄有攻击力\(p_i\)点,耐力\(s_{i}\)点. 怪物需要被依次杀死(按输入顺序). 每一天可以挑选一个英 ...

  10. Git命令详细使用指南

    Git命令详细使用指南 Git是一种广泛使用的版本控制系统,它可以帮助开发人员跟踪变更.协作项目和有效管理代码仓库.无论你是初学者还是有经验的用户,理解各种Git命令对于高效的代码管理至关重要. 安装 ...