vue-watch

作者: 名字一定要够长才可爱 | 来源:发表于2019-06-21 15:55 被阅读0次

虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。

new Vue({
        data: {
            firstName: 'Jokcy',
            lastName: 'Lou',
            fullName: ' '
        },
        watch: {
            firstName(newName, oldName) {
                this.fullName = newName + ' ' + this.lastName
            }
        }
    })

注意:

  • 在初始化的时候fullName是没有值的, 只有当数据改变时,才会显示。因为 watch 的方法默认是不会执行的,只有当监听数据变化,才会执行。
  • 不能使用箭头函数来定义watcher 函数。例如:
watch: {
     firstName : (newName, oldName) => this.fullName = newName + ' ' + this.lastName
}

理由是: 箭头函数绑定了父级作用域的上下文, 所以this将不会按照期望指向Vue实例, 所以this. fullName 和 this.lastName 将是undefined

watch中的两个重要选项

1. immediate

在选项参数中指定 immediate: true 将立即以表达式的当前值触发回调
例如:

watch: {
    $route: {
        handler: function (val, oldVal) {
          // 执行逻辑代码
        },
        immediate: true
      }

    },

应用场景: watch监听不到路由变化
解决方案: 在路由监听时加 immediate: true
理由: watch 在添加了immediate: true 后, 会优先created钩子函数执行

2. deep

在选项参数中指定deep: true 将深度监听对象内部值的变化
注意: 注意监听数组的变动不需要这么做。
例如:

new Vue({
        data: {
            obj: {
                a: '123'
            }
        },
        watch: {
            obj: {
                handler() {
                    console.log('obj.a changed')
                },
                deep: true
            }
        }
    })

不使用 deep 时,当我们改变 obj.a 的值时,watch不能监听到数据变化,默认情况下,handler 只监听属性引用的变化,也就是只监听了一层,但改对象内部的属性是监听不到的。
应用场景: watch 监听不到对象内部的属性值变化
解决方案:在对象监听时加 deep: true
理由:通过使用 deep: true 进行深入观察,这时,在监听 obj,会把 obj 下面的属性层层遍历,都加上监听事件。
该方案的缺点: 这样做,性能开销也会变大,只要修改 obj 中任意属性值,都会触发 handler。
优化: 在字符串中,写 obj 深入的属性调用,vue 会层层解析,找到 a,并进行监听.

new Vue({
        data: {
            obj: {
                a: '123'
            }
        },
        watch: {
            'obj.a': {
                handler() {
                    console.log('obj.a changed')
                }
            }
        }
    })

That's all !

相关文章

  • vue-watch

    title: vue-watch数组和对象date: 2017-03-21 vue watch 本文通过示例介绍v...

  • vue-watch

    普通监听 缺点: 不能深度监听(对象属性的改变),刷新或首次加载不能执行 高级监听 handle:watch 中需...

  • vue-watch

    虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供...

  • vue-watch

    利用watch监视,当message改变时,显示正在输入,输入完显示输入的信息。参数也可以是watch(val,o...

  • Vue-watch

    在 vue 中使用 watch 相应数据的变化,大致有三种使用方法: 第一种: 直接监听 data 中的某个数据的...

  • vue-watch 深度监听!!

    Vue提供了一个watch方法去监听某些data内的数据变动,从而触发相应的操作,当需要在数据变化时执行异步或开销...

  • vue-watch 监听的使用教程

    前沿 在项目开发中经常会用到监听,所以就科普并且记录下来。 说变了,就是监听到数据变化然后做某些操作。

  • vue-watch监听动态表单的数据

    应用场景: 表单页里,有一块可以动态添加的区域,点击创建就会出现一套此区域,下方的[报销金额]需要统计所有的[花费...

  • vue-watch 深度监控,监听数据的table数组的变化

    watch:{ tableData:{ handler(newObj,oldObj){ con...

  • vue-watch的监听对象的所有属性变化,监听触发一次

    vue--watch的监听对象的所有属性变化,监听触发一次 watch很多人都在用,但是这watch中的这两个选项...

网友评论

    本文标题:vue-watch

    本文链接:https://www.haomeiwen.com/subject/dkwyqctx.html