在我的 vue 项目中,我正在尝试从 1.x 升级到 2.x。我遇到了如下问题:
<div id="demo">
<service :service-name="serviceName" ref="testcomp" v-if="runTest"></service>
</div>
在子组件上service
,我v-if
用来控制它的存在。在父组件中,我想用来this.$refs.testcomp
调用test
子组件中定义的方法,如下所示:
methods: {
init() {
this.runTest = true;
},
},
mounted() {
this.init();
},
watch: {
runTest() {
if(this.runTest) {
console.log('1');
this.$refs.testcomp.test();
console.log('2');
}
},
},
但是错误消息说这this.$refs.testcomp
是未定义的。我用 jsfiddle 创建了现场演示:https ://jsfiddle.net/baoqger/0r4vby5n/1/
但是在 vue1.x 中,它可以很好地工作。https://jsfiddle.net/baoqger/fzuajwkz/1/
我知道改成 v-show,可以跳过这个问题。但是在我的实际项目中(这是一个大项目,由其他人开发。所以如果我将v-if更改为v-show,它会引发其他与工作流程相关的问题)。那么有什么办法可以让v-if在升级后的版本中仍然有效。
我认为这是因为当你调用 this.$refs.testcomp.test() 时,元素还没有准备好。尝试这样做:
this.$nextTick(() =>{
this.$refs.testcomp.test();
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句