• $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才能触发。
  • 相关阅读:
    命令[46]
    命令[53]
    命令[48]
    命令[43]
    命令[52]
    命令[55]
    命令[41]
    MYSQL[02]大小写问题
    hdu 1811
    hdu 1829
  • 原文地址:https://www.cnblogs.com/shiyiersan/p/13588926.html
Copyright © 2020-2023  润新知