【发布时间】:2018-05-11 15:53:06
【问题描述】:
我有一个 Vue 组件,它被包裹在 <keep-alive> 标记中以防止重新渲染。
在组件中,我想通过触发一个方法来对全局数据的一些变化做出反应。但是,我只想在组件当前处于活动状态时触发该方法。
现在,我正在做这样的事情:
export default {
data() {
return {
globalVar: this.$store.state.var,
isComponentActive: false,
};
},
methods: {
foo() { console.log('foo') };
},
watch: {
globalVar() {
if (this.isComponentActive) {
this.foo();
}
},
},
activated() {
this.isComponentActive = true;
},
deactivated() {
this.isComponentActive = false;
},
}
但我希望已经有一个可以引用的组件实例的属性。像这样的:
export default {
data() {
return { globalVar: this.$store.state.var };
},
methods: {
foo() { console.log('foo') };
},
watch: {
globalVar() {
if (this.$isComponentActive) {
this.foo();
}
},
},
}
我在the documentation for the <keep-alive> tag 中找不到类似的内容。而且,查看 Vue 实例,它似乎没有属性。但是,有没有人知道一种方法可以让我获得 Vue 实例的“激活”状态,而无需自己通过钩子来维护它?
【问题讨论】:
-
可能使用
the directive=ref是一种解决方案。使用<keep-alive>为您的组件添加ref="test",然后通过this.$refs.test ? true : false检查活动状态。 -
那不行,即使组件被停用,组件的
$refs数组也会保留。除非您的意思是来自父范围,否则这对我没有帮助,因为我需要防止触发的方法在停用的组件中,而不是在父范围内。
标签: javascript vue.js vuejs2