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 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 Vue.js
vue-cli4.0多环境配置变量与模式详解
Dec 30 Vue.js
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
vue+spring boot实现校验码功能
May 27 Vue.js
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
Jun 09 Vue.js
一篇文章学会Vue中间件管道
Jun 20 Vue.js
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
vue自定义右键菜单之全局实现
Apr 09 Vue.js
Vue组件化(ref,props, mixin,.插件)详解
May 15 Vue.js
vue router 动态路由清除方式
May 25 Vue.js
vue css 相对路径导入问题级踩坑记录
Jun 05 Vue.js
vue实现简易音乐播放器
Aug 14 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
php中文本数据翻页(留言本翻页)
2006/10/09 PHP
php遍历CSV类实例
2015/04/14 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
JavaScript经典效果集锦
2010/07/06 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
轻松掌握JavaScript代理模式
2016/08/26 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
Python实现建立SSH连接的方法
2015/06/03 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
Python读取excel指定列生成指定sql脚本的方法
2018/11/28 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
为什么是 Python -m
2020/06/19 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
会计电算化个人求职信范文
2014/01/24 职场文书
副处级干部考察材料
2014/05/17 职场文书
法学求职信
2014/06/22 职场文书
MySQL系列之六 用户与授权
2021/07/02 MySQL
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS