您的假设确实(几乎)正确。
this.$watch() 有两个主要优势。
- 您可以开始动态观看
-
this.$watch() 的返回值是一个 unwatch 函数,您可以使用它在运行时动态停止观察者
但这并不一定意味着您应该始终使用this.$watch() 而不是watch: {}。相反。您应该始终考虑您的用例需要什么
Unwatch 示例:
export default {
//..
created(props) {
const unwatchAge = this.$watch(() => this.user.age, (value, oldValue) => {
if (value >= 18) {
alert('You are now allowed to drive a car!');
unwatchAge(); //we don't need age watching for anything else
}
});
}
//...
}
顺便说一句,使用 VUE3,您可能想研究 watch() / watchEffect() composition API 方法。
watch() 与 watch: {} 和 this.$watch() 的作用相同,并且还有一个 unwatch-method 作为返回值。
watchEffect() 检查参数(函数)中提到的任何值并在内部放置一个观察者。
watch() 示例(作文)
import { toRef, watch} from 'vue';
export default {
//...
setup(props) {
const age = toRef(props.age);
const unwatchAge = watch(age, console.log);
// no () => age or () => age.value needed as age is a reference by using toRef and references can be handles like this
setTimeout(() => {
console.warn('unwatching age!');
unwatchAge();
}, 5000);
}
//...
}
watchEffect() 示例(作文)
import { toRef, watchEffect} from 'vue';
export default {
//...
setup(props) {
const age = toRef(props.age);
watchEffect(() => {
if (age.value >= 18) {
alert('You are now allowed to drive a car!');
}
});
//vue will internally recognize that age has to be watched here. No telling it manually.
}
//...
}