3 回答

TA贡献1798条经验 获得超7个赞
您可能已经解决了这个问题,但只是为了回答这个问题:
我遇到了类似的问题,这似乎是因为在 Vue 有时间用自己的版本替换根 DOM 之前调用了该函数。你可以做些什么来解决这个问题是创建一个mounted生命周期钩子并在那里调用函数。
const vm = new Vue({
el: '#app',
data: {
sayHi: 'Ello World',
},
mounted: function() { // The hook. Here, Vue has already worked its magic.
console.log('YOUR ELEMENT ----> ', this.doSomething())
},
methods: {
doSomething: function() {
return this.$refs['nav-container']
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<span ref="nav-container">{{ sayHi }}</span>
</div>

TA贡献1155条经验 获得超0个赞
这可能不是您特定问题的答案,但我发现另一个$refs
空的原因是定义它的组件尚未创建/安装。可能是由于 Vue 使用的延迟渲染。
我有一组选项卡,其中一个是我有一个“ref=”的选项卡,如果我没有访问该选项卡,那么它$refs
是空的。但是如果我第一次访问该选项卡,那么 ref 设置正确。

TA贡献1863条经验 获得超2个赞
你可以做到,你遇到的问题是你的父组件实际上没有任何参考。
我不建议这样做,无论是使用 vuex、eventbus 还是 $emit
Vue.component('componentA', {
template: '<div><span ref="ref-inside-a">You\'re in A!</span></div>',
methods:{
log(){
console.log('Hello from a')
}
}
})
Vue.component('componentB', {
props: ['ball'],
template: '<div><span>This is B!</span></div>',
mounted() {
this.$root.$refs['a'].log()
console.log(this.$root.$refs['a'].$refs['ref-inside-a'])
}
})
new Vue({
el: "#app",
mounted() {
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<component-a ref="a"></component-a>
<component-b ref="b"></component-b>
</div>
添加回答
举报