Vue组件跨层级如何获取组件

  介绍

这篇文章主要讲解了Vue组件跨层级如何获取组件,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

。美元家长访问父实例

。孩子们当美元前实例的直接子组件。(不保证顺序,不是响应式)

。父母。父母。美元美元。参考文献xxx跨级访问父组件

。孩子。孩子。美元美元。参考文献xxx跨级访问子组件

这种递归的方式代码繁琐性能低效

<强> ref

只能获取当前组件上下文组件无法跨层级

裁判是字符串被用来给元素或子组件注册引用信息。

引用信息将会注册在父组件的参美元对象上。

如果在普通的DOM元素上使用,引用指向的就是DOM元素;

如果用在子组件上,引用就指向组件实例

& lt; !——vm。参refs.p/这。美元。p获取DOM节点——比;   & lt; p ref=皃"祝辞hello

  & lt; !——vm。参refs.child/这。美元。孩子获取组件实例——比;   & lt;子组件ref=癱hild"祝辞& lt;/child-component>

<强>注:

因为ref本身是作为渲染结果被创建的,在初始渲染的时候你不能访问它们,它们还不存在

美元参不是响应式的,因此你不应该试图用它在模板中做数据绑定。

这仅作为一个用于直接操作子组件的“逃生舱”——你应该避免在模板或计算属性中访问参美元。

当裁判和v代表一起使用的时候,你得到的引用将会是一个包含了对应数据源的这些子组件的数组。

<>强如何优雅的获取跨层级实例,# 63;

1, npm安装vue-ref | |纱添加vue-ref安装vue-ref插件

2,导入从“进口ref vue-ref"

3,使用插件Vue。使用(ref,{名称:“ant-ref"});名字是给插件起名

插件使用方法

//使用“提供”在根组件提供数据
  提供(){
  返回{//主动通知将组件实例绑定在根组件上
  setChildrenRef:(名称、ref)=比;{
  这[名字]=裁判;
  },//主动获取获取绑定的组件
  getChildrenRef: name=比;{
  返回这个[名字];
  },//获取根组件
  getRef:()=比;{
  返回;
  }
  }
  }//使用“注入”在子组件中注入数据
  注射:{
  setChildrenRef: {
  默认值:()=比;{}
  },
  getParentRef: {
  来自:“getRef"
  默认值:()=比;{}
  },
  getParentChildrenRef: {
  来自:“getChildrenRef"
  默认值:()=比;{}
  }
  }//使用指令注册子组件
  & lt; ChildrenH v-ant-ref=癱=比;setChildrenRef (& # 39; childrenH& # 39; (c)“;/比;//使用指令注册DOM元素
  & lt; h4 v-ant-ref=癱=比;setChildrenRef (& # 39; childrenE& # 39; (c)“在E结点& lt;/h4> 
//获取根组件实例   this.getParentRef ()//获取指定名称组件实例   this.getParentChildrenRef (“childrenH")//这里输出的事DOM   this.getParentChildrenRef (“childrenE")

vue-ref插件源码

“使用strict";      Object.defineProperty(出口,“__esModule", {   值:true   });   exports.default={   安装:安装功能(Vue) {   var=参数选项。长度比;1,,参数[1]!==未定义,# 63;参数[1]:{};   var directiveName=options.name | | & # 39;裁判# 39;;   console.log(参数)   Vue。指令(directiveName, {   绑定,绑定:函数绑定(el vnode) {//自定义指令传入值是函数,在这里执行传入组件实例   binding.value (vnode.componentInstance | | el vnode.key);//vnode。关键是使用插件时起的名称   },   更新:更新功能(el、绑定vnode oldVnode) {   如果(oldVnode。数据,和oldVnode.data.directives) {   var oldBinding=oldVnode.data.directives。找到(函数(指令){   var=directive.name名称;   返回名称===directiveName;   });   如果(oldBinding,,oldBinding。价值!==binding.value) {   oldBinding,,oldBinding。值(null, oldVnode.key);//如果指令绑定的值有变化,则更新组件实例   binding.value (vnode.componentInstance | | el vnode.key);   返回;   }   }//不应该这种情况   如果(vnode.componentInstance !==oldVnode.componentInstance | | vnode。榆树!==oldVnode.elm) {   binding.value (vnode.componentInstance | | el vnode.key);   }   },   解开:函数解开(el、绑定vnode) {   绑定。值(null, vnode.key);   }   });   }   };

<>强vue项目中z - index不起作用(将vue实例挂在到窗口上面)

问题描述:由于原有项目(传统项目)中嵌入新的vue组件,对话框弹出框的z - index: 999999;任然不起作用;

Vue组件跨层级如何获取组件