【VUE】12、VUE中watch的使用详解

embedded/2024/11/13 23:35:25/

在 Vue.js 中,watch 是一个强大的选项,用于观察和响应 Vue 实例上数据的变化。它允许你定义当某个数据属性发生变化时应该执行的回调函数。这在处理复杂的数据逻辑、异步操作或需要在数据变化时执行特定操作的场景中非常有用。

1、基本用法

watch 选项可以作为一个对象放在 Vue 实例的 data 选项之后,其键是要观察的属性名,值是一个回调函数或包含多个选项的对象。

  • 简单的回调函数
new Vue({el: '#app',data: {question: '',answer: 'I cannot give you an answer until you ask a question!'},watch: {// 当 question 发生变化时,这个函数会被调用question(newQuestion, oldQuestion) {this.answer = 'Waiting for you to stop typing...';this.getAnswer();}},methods: {getAnswer() {if (this.question.indexOf('?') === -1) {this.answer = 'Questions usually contain a question mark. ;-)';return;}this.answer = 'Thinking...';axios.get('https://yesno.wtf/api').then(response => {this.answer = _.capitalize(response.data.answer);}).catch(error => {this.answer = 'Error! Could not reach the API. ' + error;});}}
});

在这个例子中,watch 监视 question 数据属性的变化,当 question 改变时,会调用 question 对应的回调函数,并传入新的值和旧的值。

new Vue({el: '#app',data: {someObject: {a: 1,b: 2}},watch: {// 深度监视 someObject 及其子属性的变化someObject: {handler(newVal, oldVal) {console.log('someObject changed:', newVal, oldVal);},deep: true,immediate: true // 在绑定时立即以当前的属性值触发回调}}
});

watch 选项的详细配置

handler: 当数据变化时调用的回调函数。
deep: 设置为 true 时,会深度递归监视对象内部的所有属性。
immediate: 设置为 true 时,会在监视器创建时立即执行一次回调函数,此时回调函数的参数是初始值。

2、停止监视

在某些情况下,你可能需要在组件销毁或某个条件满足时停止监视某个属性。Vue 提供了 unwatch 方法来实现这一点。

const vm = new Vue({el: '#app',data: {someData: 'Initial value'},watch: {someData(newVal, oldVal) {console.log(`someData changed from ${oldVal} to ${newVal}`);}},created() {// 保存 unwatch 函数以便后续调用this.unwatchSomeData = this.$watch('someData', (newVal, oldVal) => {console.log(`Another watch on someData: ${oldVal} -> ${newVal}`);});},beforeDestroy() {// 组件销毁前停止监视if (this.unwatchSomeData) {this.unwatchSomeData();}}
});

在这个例子中,我们在 created 钩子中保存了 unwatch 函数,并在 beforeDestroy 钩子中调用它来停止监视。

3、总结

watch 选项在 Vue.js 中非常强大,允许你响应数据属性的变化并执行复杂的逻辑。通过合理使用 handler、deep 和 immediate 选项,你可以更灵活地控制监视行为。此外,通过 unwatch 方法,你还可以根据需要停止监视。希望这个详解能帮助你更好地理解和使用 Vue.js 中的 watch 选项。

如您在阅读中发现不足,欢迎留言!!!


http://www.ppmy.cn/embedded/137346.html

相关文章

day08|计算机网络重难点之 DNS查询过程、CDN是什么,有什么作用?、Cookie和Session是什么?有什么区别?

day08|计算机网络重难点之 DNS查询过程、CDN是什么,有什么作用?、Cookie和Session是什么?有什么区别? 21.DNS查询过程22.CDN是什么,有什么作用?23.Cookie和Session是什么?有什么区别&#xff1f…

重构代码之内联方法

在代码重构中,内联方法主要用于处理那些没有足够独立意义的方法。它的核心思想是将方法的实现直接放到调用它的地方,从而减少不必要的抽象和函数调用。以下是具体的介绍: 一、适用场景 内联方法适用于以下场景: 方法内容过于简…

写给初学者的React Native 全栈开发实战班

React Native 全栈开发实战班 亲爱的同学们: 很高兴在这里与大家相聚!我是你们的讲师,将带领大家一起踏上 React Native 移动开发的学习之旅。 为什么选择 React Native? 在这个移动互联网时代,App 开发工程师已经…

探索微服务中的权限控制:一次线上问题排查的思考

在这篇博客中,我将分享一个近期在排查线上问题时,意外发现的权限控制实现方式。起初,这个问题让我迷惑不已,因为在前端请求中,有个权限控制参数为 null,但在请求从网关进入微服务后,该参数神秘地…

aws(学习笔记第十二课) 使用AWS的RDS-MySQL

aws(学习笔记第十二课) 使用AWS的RDS 学习内容: AWS的RDS-MySQL 1. 使用AWS的RDS 什么是RDS RDS就是Relation Database Service的缩写,是AWS提供的托管关系型数据库系统。让用户能够在 AWS Cloud 云中更轻松地设置、操作和扩展关系数据库。 数据库和we…

软件设计课程笔记

11.11就做了这两件事情 写在前面11.11课程总结(1)将开发板与pc机连接到同一个局域网(2)NFS共享文件设置 写在前面 “好记性不如烂笔头”。记性太差,总结来救。水平太差,那没办法。这是写给自己的课程笔记&…

RoseTTAFold MSA_emb类解读

MSA_emb 类的作用是对多序列对齐(MSA)数据进行嵌入编码,同时添加位置编码和查询编码(调用PositionalEncoding 和 QueryEncoding)以便为序列特征建模类。 源代码: class MSA_emb(nn.Module):def __init__(self, d_model=64, d_msa=21, p_drop=0.1, max_len=5000):super(…

Spring Boot编程训练系统:技术实现与案例分析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…