我怎样才能摧毁这个观察者?我的子组件中只需要一次,当我的异步数据从父组件加载时。
export default {
...
watch: {
data: function(){
this.sortBy();
},
},
...
}
gregor;)
答案 0 :(得分:7)
如果你通过调用vm。$ watch函数动态构造一个观察者,它会返回一个函数,可以在以后调用该函数来禁用(删除)该特定的观察者。
不要像在代码中那样静态地将观察者放在组件中,而是执行以下操作:
created() {
var unwatch = this.$watch(....)
// now the watcher is watching and you can disable it
// by calling unwatch() somewhere else;
// you can store the unwatch function to a variable in the data
// or whatever suits you best
}
可以从这里找到更全面的解释:https://codingexplained.com/coding/front-end/vue-js/adding-removing-watchers-dynamically
答案 1 :(得分:0)
这里是一个例子:
<script>
export default {
data() {
return {
employee: {
teams: []
},
employeeTeamsWatcher: null,
};
},
created() {
this.employeeTeamsWatcher = this.$watch('employee.teams', (newVal, oldVal) => {
this.setActiveTeamTabName();
});
},
methods: {
setActiveTeamTabName() {
if (this.employee.teams.length) {
// once you got your desired condition satisfied then unwatch by calling:
this.employeeTeamsWatcher();
}
},
},
};
</script>
答案 2 :(得分:0)
如果您使用 vue2
插件或 composition-api
使用 vue3
,您可以使用由 WatchStopHandle
返回的 watch
例如:
const x = ref(0);
setInterval(() => {
x.value++;
}, 1000);
const unwatch = watch(
() => x.value,
() => {
console.log(x.value);
x.value++;
// stop watch:
if (x.value > 3) unwatch();
}
);