watch侦听器简单写法
-
作用:监视数据变化,执行一些业务逻辑或异步操作
-
语法:
- watch同样声明在跟data同级的配置项中
- 简单写法:简单类型数据直接监视
- 完整写法:添加额外配置项
data: {
words: 'apple',
obj: {
words: 'apple'
}
},
watch: {
// 该方法会在数据变化时,触发执行
数据属性名 (newValue, oldValue) {
一些业务逻辑或异步操作。
},
'对象.属性名' (newValue, oldValue) {
一些业务逻辑或异步操作。
}
}
示例1:直接监视
<div class="box">
<div class="input-wrap">
<textarea v-model="words"></textarea>
<!-- <textarea v-model="obj.words"></textarea> -->
<span><i>⌨️</i>文档翻译</span>
</div>
<div class="output-wrap">
<div class="transbox">mela</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
words: ''
},
watch: {
// 数据变化时调用执行
words(newValue, oldValue) {
console.log('变化', newValue, oldValue);
}
}
})
</script>
示例2:监视对象中的键值
<div class="box">
<div class="input-wrap">
<!-- <textarea v-model="words"></textarea> -->
<textarea v-model="obj.words"></textarea>
<span><i>⌨️</i>文档翻译</span>
</div>
<div class="output-wrap">
<div class="transbox">mela</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
// words: ''
obj: {
words: ''
}
},
watch: {
// 数据变化时调用执行
// words(newValue, oldValue) {
// console.log('变化', newValue, oldValue);
// }
'obj.words'(newValue, oldValue) {
console.log('变化', newValue, oldValue);
}
}
})
</script>
watch侦听器完整写法
完整写法需添加额外的配置项
deep:true
对复杂类型进行深度监听immdiate:true
初始化立刻执行一次handler方法
data: {
obj: {
words: 'apple',
lang: 'italy'
},
},
watch: {// watch 完整写法
数据属性名: {
deep: true, // 深度监视
immediate: true, // 是否立刻执行一次handler,即初始的时候
handler (newValue) {
console.log(newValue)
}
}
}
总结
1.简单写法
watch: {
数据属性名 (newValue, oldValue) {
一些业务逻辑或异步操作。
},
'对象.属性名' (newValue, oldValue) {
一些业务逻辑或异步操作。
}
}
2.完整写法
watch: {// watch 完整写法
数据属性名: {
deep: true, // 深度监视(针对复杂类型)
immediate: true, // 是否立刻执行一次handler,即初始的时候
handler (newValue) {
console.log(newValue)
}
}
}