Vue基础中的侦听器是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。vue中什么是侦听器开发中我们在data返回的对象中定义了数据,这个数据可以通过插值语法等方式绑定到te
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
目标: 可以侦听data/computed属性值改变
语法:
watch: { "被侦听的属性名" (newVal, oldVal){ }}
例子代码:
<template> <div> <input type="text" v-model="name"> </div></template><script>export default { data(){ return { name: "" } }, // 目标: 侦听到name值的改变 watch: { // newVal: 当前最新值 // oldVal: 上一刻值 name(newVal, oldVal){ console.log(newVal, oldVal); } }}</script><style></style>
小结: 想要侦听一个属性变化, 可使用侦听属性watch
目标: 可以侦听data/computed属性值改变
语法:
watch: { "被侦听的属性名" (newVal, oldVal){ }}
例子代码:
<template> <div> <input type="text" v-model="user.name"> <input type="text" v-model="user.age"> </div></template><script>export default { data(){ return { user: { name: "", age: 0 } } }, // 目标: 侦听对象 watch: { user: { handler(newVal, oldVal){ // user里的对象 console.log(newVal, oldVal); }, deep: true, immediate: true } }}</script><style></style>
小结: immediate立即侦听, deep深度侦听, handler固定方法触发
看完上述内容,你们掌握Vue基础中的侦听器是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!
--结束END--
本文标题: Vue基础中的侦听器是什么
本文链接: https://lsjlt.com/news/301380.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0