介绍
这篇文章主要讲解了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;任然不起作用;