Vue使用Ref跨层级获取组件的步骤


Posted in Vue.js onJanuary 25, 2021

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

示例介绍

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

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

Vue使用Ref跨层级获取组件的步骤

文档目录结构

Vue使用Ref跨层级获取组件的步骤

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

页面样式如下:

Vue使用Ref跨层级获取组件的步骤

安装vue-ref

下载vue-ref

npm install vue-ref --save

全局注册

import ref from 'vue-ref'
Vue.use(ref)

使用方法

<!-- 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页面中,提供了三个方法:分别用来:

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

分别说明各个页面

组件A页面:

Vue使用Ref跨层级获取组件的步骤

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

组件B页面:

Vue使用Ref跨层级获取组件的步骤

组件C页面:

Vue使用Ref跨层级获取组件的步骤

组件D页面:

Vue使用Ref跨层级获取组件的步骤

组件E页面:

Vue使用Ref跨层级获取组件的步骤

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

结果

Vue使用Ref跨层级获取组件的步骤

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

以上就是Vue使用Ref跨层级获取组件的步骤的详细内容,更多关于vue 使用Ref获取组件的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vue单元格多列合并的实现
Nov 26 Vue.js
vue3.0+vue-router+element-plus初实践
Dec 02 Vue.js
vue图片裁剪插件vue-cropper使用方法详解
Dec 16 Vue.js
vue中实现点击空白区域关闭弹窗的两种方法
Dec 30 Vue.js
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
Vue页面渲染中key的应用实例教程
Jan 12 Vue.js
Vite和Vue CLI的优劣
Jan 30 Vue.js
如何封装Vue Element的table表格组件
Feb 06 Vue.js
原生JS封装vue Tab切换效果
Apr 28 Vue.js
关于vue中如何监听数组变化
Apr 28 Vue.js
vue实现滑动解锁功能
Mar 03 Vue.js
Vue.Draggable实现交换位置
Apr 07 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 #Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 #Vue.js
vue 计算属性和侦听器的使用小结
Jan 25 #Vue.js
vue keep-alive的简单总结
Jan 25 #Vue.js
vue form表单post请求结合Servlet实现文件上传功能
Jan 22 #Vue.js
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 #Vue.js
Vue仿Bibibili首页的问题
Jan 21 #Vue.js
You might like
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
xajax写的留言本
2006/11/25 PHP
PHP与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
crontab无法执行php的解决方法
2016/01/25 PHP
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
js利用iframe实现选项卡效果
2020/08/09 Javascript
Python使用三种方法实现PCA算法
2017/12/12 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Python干货:分享Python绘制六种可视化图表
2018/08/27 Python
浅析python参数的知识点
2018/12/10 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
情人节快乐! python绘制漂亮玫瑰
2020/08/18 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
小学生红领巾广播稿
2014/01/21 职场文书
总经理岗位职责范本
2014/02/02 职场文书
音乐专业自荐信
2014/02/07 职场文书
应届生求职信
2014/05/31 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
邀请函模板
2015/02/02 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
Python3 如何开启自带http服务
2021/05/18 Python
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers
mysql配置SSL证书登录的实现
2021/09/04 MySQL
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript