认识和使用vue中更全面的侦听器watch

发布时间:2022-07-01 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了认识和使用vue中更全面的侦听器watch脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

认识和使用vue中更全面的侦听器watch

vue中什么是侦听器呢?

  • 开发中我们在data返回的对象中定义了数据,这个数据可以通过插值语法等方式绑定到templat中。
  • 当数据变化的时候,template里绑定的数据会自动进行更新来显示最新的数据。但是这种变化是在template中自动侦听data的值来进行变换的
  • 在某些情况下,我们希望在代码逻辑中监听某个数据的变化,这个时候就需要用到侦听器watch了

官方定义:Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的

一个对象,键是要侦听的响应式 property——包含了 data 或 computed property,而值是对应的回调函数。值也可以是方法名,或者包含额外选项的对象。组件实例将会在实例化时调用 $watch(),参阅 $watch,以了解更多关于 deepimmediate 和 flush 选项的信息

侦听器的用法如下:
  • 选项:watch
  • 类型:{ [key: string]: string | Function | Object | Array}

侦听器watch的配置选项:

       默认情况下,watch只是在侦听数据的引用变化,对于数据内部属性的变化是不会做出响应的:

  • 这个时候我们可以使用一个选项deep进行更深层的侦听;
  • 另外一个属性,是希望一开始的就会立即执行一次: 这个时候我们使用immediate选项这个时候无论后面数据是否有变化,侦听的函数都会有限执行一次;

data的内容:

data() {
    return {
        info: {
            name: 'cgj'
        }
    }
}
watch: {
    info: {
        handler(newValue, oldValue) {
            console.log(newValue, oldValue)    
        }
        deep: true,
        immediate: true,
    }
}

 另外一个是Vue3文档中没有提到的,但是Vue2文档中有提到的是侦听对象的属性:
'info.name': function(newValue, oldValue) {
    console.log(newValue, oldValue)
}
还有另外一种方式就是使用 $watch 的API:
具体$watch可以查看官方的API查看(用的方式比较少): 实例方法 | Vue.js

最终示例:

const app = createApp({
  data() {
    return {
      a: 1,
      b: 2,
      c: {
        d: 4
      },
      e: 5,
      f: 6
    }
  },
  watch: {
    // 侦听顶级 property
    a(val, oldVal) {
      console.log(`new: ${val}, old: ${oldVal}`)
    },
    // 字符串方法名
    b: 'someMethod',
    // 该回调会在任何被侦听的对象的 property 改变时被调用,不论其被嵌套多深
    c: {
      handler(val, oldVal) {
        console.log('c changed')
      },
      deep: true
    },
    // 侦听单个嵌套 property
    'c.d': function (val, oldVal) {
      // do something
    },
    // 该回调将会在侦听开始之后被立即调用
    e: {
      handler(val, oldVal) {
        console.log('e changed')
      },
      immediate: true
    },
    // 你可以传入回调数组,它们会被逐一调用
    f: [
      'handle1',
      function handle2(val, oldVal) {
        console.log('handle2 triggered')
      },
      {
        handler: function handle3(val, oldVal) {
          console.log('handle3 triggered')
        }
        /* ... */
      }
    ]
  },
  methods: {
    someMethod() {
      console.log('b changed')
    },
    handle1() {
      console.log('handle 1 triggered')
    }
  }
})

const vm = app.mount('#app')

vm.a = 3 // => new: 3, old: 1

顺便分享一波个人公众号,关注关注我呗,分享一些你们需要的资源,大家一起进步。

会分享一些视频资源的哦

认识和使用vue中更全面的侦听器watch

 

脚本宝典总结

以上是脚本宝典为你收集整理的认识和使用vue中更全面的侦听器watch全部内容,希望文章能够帮你解决认识和使用vue中更全面的侦听器watch所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: