千家信息网

Vue基础中的侦听器是什么

发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,Vue基础中的侦听器是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。vue中什么是侦听器开发中我们在data返回的对象中定义了数据,
千家信息网最后更新 2024年09月23日Vue基础中的侦听器是什么

Vue基础中的侦听器是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

vue中什么是侦听器

  • 开发中我们在data返回的对象中定义了数据,这个数据可以通过插值语法等方式绑定到templat中。

  • 当数据变化的时候,template里绑定的数据会自动进行更新来显示最新的数据。但是这种变化是在template中自动侦听data的值来进行变换的

  • 在某些情况下,我们希望在代码逻辑中监听某个数据的变化,这个时候就需要用到侦听器watch了

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

一个对象,键是要侦听的响应式 property--包含了 data 或 computed property,而值是对应的回调函数。值也可以是方法名,或者包含额外选项的对象。组件实例将会在实例化时调用 $watch(),参阅 $watch,以了解更多关于 deep、immediate 和 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

目标: 可以侦听data/computed属性值改变

语法:

watch: {    "被侦听的属性名" (newVal, oldVal){    }}

例子代码:

小结: 想要侦听一个属性变化, 可使用侦听属性watch

vue侦听器-深度侦听和立即执行

目标: 可以侦听data/computed属性值改变

语法:

watch: {    "被侦听的属性名" (newVal, oldVal){    }}

例子代码:

小结: immediate立即侦听, deep深度侦听, handler固定方法触发

看完上述内容,你们掌握Vue基础中的侦听器是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

0