vuejs2:我怎样才能摧毁一个观察者?
vuejs2: how can i destroy a watcher?
我怎样才能摧毁这个守望者?当我的异步数据从父组件加载时,我的子组件只需要一次。
export default {
...
watch: {
data: function(){
this.sortBy();
},
},
...
}
格雷戈尔 ;)
如果您通过调用 vm.$watch 函数动态构造一个观察者,它 returns 一个可以在稍后的时间点调用的函数来禁用(删除)那个特定的观察者。
不要像在您的代码中那样将观察器静态地放在组件中,而是做如下事情:
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
这是一个例子:
<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>
如果您使用 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();
}
);
对于这种东西,你可以研究 API
的类型声明,这很有帮助,只需将鼠标悬停在上面,它就会提示你可以做什么:
我怎样才能摧毁这个守望者?当我的异步数据从父组件加载时,我的子组件只需要一次。
export default {
...
watch: {
data: function(){
this.sortBy();
},
},
...
}
格雷戈尔 ;)
如果您通过调用 vm.$watch 函数动态构造一个观察者,它 returns 一个可以在稍后的时间点调用的函数来禁用(删除)那个特定的观察者。
不要像在您的代码中那样将观察器静态地放在组件中,而是做如下事情:
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
这是一个例子:
<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>
如果您使用 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();
}
);
对于这种东西,你可以研究 API
的类型声明,这很有帮助,只需将鼠标悬停在上面,它就会提示你可以做什么: