Vue使用Ref跨层级获取组件实例

示例介绍

在开发过程中,我们难免会使用到跨层级的ref实例获取,大部分情况下,我们都可以通过组件自身的parent或者children去找到需要的实例。但是当层级不明显或者太深的时候,用此方法难免过于臃肿和低效率。

如下图所示,我们通过组件E去获取组件D的组件实例。

文档目录结构

分别有A、B、C、D、E和index六个组件,并按照上图的组件顺序,分别插入到各自的页面中。

页面样式如下:

安装vue-ref

  1. 下载vue-ref

npm install vue-ref --save

  1. 全局注册
import ref from 'vue-ref'
Vue.use(ref)
  1. 使用方法
<!-- vm.dom will be the DOM node -->
<p v-ref="c => this.dom = c">hello</p> <!-- vm.child will be the child component instance -->
<child-component v-ref="c => this.child = c"></child-component> <span v-for="n in 10" :key="n" v-ref="(c, key) => {...}">{{ n }} </span>

根组件自定义方法[使用provide和inject]

我们index页面中,提供了三个方法:分别用来:

  1. 设置子组件的实例,setChildrenRef
  2. 获取自组件实例, getChildrenRef
  3. 获取当前节点实例, getRef
provide() {
return {
setChildrenRef: (name, ref) => {
this[name] = ref
},
getChildrenRef: name => {
return this[name]
},
getRef: () => {
return this
}
}
},

分别说明各个页面

组件A页面:

通过注入的方法,获取setChildrenRef方法,并通过上述指令,将组件D缓存起来

组件B页面:

组件C页面:

组件D页面:

组件E页面:

在这个页面中,我们不仅注入了两个方法,还设置了切换D组件颜色的方法,用来测试我们是否真的跨层级获取到了组件D的实例。

结果

可以看到,三个parent的实例是一样的,在组件E中也成功修改了组件D的文字样式。good!

最新文章

  1. t2712:字符串移位包含问题
  2. PHP输出Excel两种方法
  3. ABAP之PINYING拼音
  4. Nodejs学习笔记(十三)— PM2
  5. iOS开发——语法篇OC篇&amp;静态方法与实例方法
  6. 【原】 Spark中Worker源码分析(一)
  7. 网络编程Socket之TCP
  8. ECharts的使用相关参考---转
  9. 445port入侵详细解释
  10. Python基础——4高阶函数
  11. 自动化测试基础篇--Selenium Xpath定位
  12. 自然语言处理(NLP)入门学习资源清单
  13. 手动释放和收缩tempdb
  14. AS不能真机调试 (转)
  15. TcxGrid 选中 整行
  16. apktool反解apk包
  17. this指针的调整
  18. C# 获取textbox行数
  19. bzoj4035【HAOI2015】数组游戏
  20. 【bzoj1087】互不侵犯King 状态压缩dp

热门文章

  1. [日常摸鱼]Luogu2521[HAOI2011]防线修建-set维护凸包
  2. 关于 ReentrantLock 中锁 lock() 和解锁 unlock() 的底层原理浅析
  3. Azure Service Bus(一)入门简介
  4. Swift3.0学习之Button
  5. new 的原理和实现
  6. Java学习日报7.13
  7. Linux 时间同步 04 ntp时间同步
  8. jQuery EasyUI学习二
  9. Azure Service Bus(三)在 .NET Core Web 应用程序发送ServiceBus Queue
  10. 第三章 IP地址规划设计技术(很重要)