$refs获取不到其他组件的方法或数据

我在获取一个兄弟组件的子组件的时候遇到一个问题

组件的层级关系如下:  我是要从header组件中调用table组件中的一个方法

index.vue
    header.vue
    footer.vue
        table.vue

从header开始: 

this.$parent.$refs.footer.$refs.table.function()

这时候报错   function is not defined        这个function 代表函数名

刚开始以为是层级太多获取不到,不知道会不会有这个问题,但是我这里应该不是这个问题。

因为我这里的table组件是用  v-if  来切换展示的,所以会因为样式渲染了但是数据没过来,导致方法或者变量是undefined

最后解决办法是v-if换成  v-show,不过if  show 的区别还是要搞清楚,以免出现其他位置的错误。

if和show的区别:

v-show和v-if都是用来显示隐藏元素,v-if还有一个v-else配合使用,两者达到的效果都一样,性能方面去有很大的区别。

v-show

v-show不管条件是真还是假,第一次渲染的时候都会编译出来,也就是标签都会添加到DOM中。之后切换的时候,通过display: none;样式来显示隐藏元素。
可以说只是改变css的样式,几乎不会影响什么性能。

v-if

在首次渲染的时候,如果条件为假,什么也不操作,页面当作没有这些元素。当条件为真的时候,开始局部编译,动态的向DOM元素里面添加元素。
当条件从真变为假的时候,开始局部编译,卸载这些元素,也就是删除。

性能方面

v-if绝对是更消耗性能的,因为v-if在显示隐藏过程中有DOM的添加和删除,v-show就简单多了,只是操作css。

使用场景

因为v-show无论如何都会渲染,如果在一些场景下很难出现,那么使用v-if。如果是一些固定的,条件内容都不怎么会改变的,频繁切换的,使用v-show会比较省性能。
如果是子组件,每次切换子组件不执行生命周期,使用v-show,如果子组件需要重新执行生命周期,那么使用v-if才能触发。
原文地址:https://www.cnblogs.com/shiyiersan/p/13588926.html