zoukankan      html  css  js  c++  java
  • $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才能触发。
  • 相关阅读:
    Easy UI form表单提交 IE浏览器不执行success ,以及 datagrid 展示过慢
    JS批量获取参数构建JSON参数对象
    Easy UI datebox控件无法正常赋值
    EasyUI控件combobox重复请求后台,dialog窗口数据异常
    后台Post/Get 请求接口 方式
    WebForm 页面ajax 请求后台页面 方法
    实现输入框小数多 自动进位展示,编辑时实际值不变
    页面获取Web控件ID不能正常获取,它惹得祸
    线性表的链式存储——单链表
    线性表
  • 原文地址:https://www.cnblogs.com/shiyiersan/p/13588926.html
Copyright © 2011-2022 走看看