uniapp watch如何使用
在uniapp中如何使用watch监听数据变化?我在vue项目中熟悉watch的用法,但在uniapp里尝试监听data中的数据时发现不生效。能否提供一个完整的示例,包括如何在uniapp的页面组件中正确配置和使用watch?另外,uniapp的watch和vue的watch在使用上有什么区别需要注意的吗?
2 回复
在uniapp中,使用watch监听数据变化:
export default {
data() {
return {
count: 0
}
},
watch: {
count(newVal, oldVal) {
console.log(`count从${oldVal}变为${newVal}`)
}
}
}
也可以监听对象属性:
watch: {
'obj.name'(newVal) {
console.log('name变化了', newVal)
}
}
支持深度监听对象变化:
watch: {
obj: {
handler(newVal) {
console.log('obj变化了')
},
deep: true
}
}
在 UniApp 中使用 watch 监听数据变化,类似于 Vue.js 的响应式机制。以下是具体用法和示例:
基本用法
在页面的 data 中定义需要监听的数据,然后在 watch 对象中设置监听函数。
export default {
data() {
return {
count: 0,
user: {
name: 'Alice',
age: 20
}
}
},
watch: {
// 监听基本数据类型
count(newVal, oldVal) {
console.log(`count 从 ${oldVal} 变为 ${newVal}`);
},
// 监听对象属性(深度监听)
'user.name': {
handler(newVal, oldVal) {
console.log(`用户名从 ${oldVal} 变为 ${newVal}`);
},
deep: true // 深度监听对象内部变化
},
// 立即触发监听
'user.age': {
handler(newVal, oldVal) {
console.log(`年龄变化为: ${newVal}`);
},
immediate: true // 立即执行一次
}
},
methods: {
changeData() {
this.count++;
this.user.name = 'Bob';
}
}
}
监听对象整体变化
若需监听整个对象,需启用 deep 选项:
watch: {
user: {
handler(newVal, oldVal) {
console.log('用户信息发生变化', newVal);
},
deep: true
}
}
注意事项
- 监听数组:直接修改数组元素需用
this.$set或数组方法(如push)触发更新。 - 性能优化:避免过度使用深度监听,尤其是大型对象。
- 卸载监听:页面销毁时自动清理,无需手动处理。
通过以上方式,可灵活响应 UniApp 中数据的变化,实现动态交互逻辑。

