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 elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
vue-cli4.0多环境配置变量与模式详解
Dec 30 Vue.js
vue 实现图片懒加载功能
Dec 31 Vue.js
详解vue3中组件的非兼容变更
Mar 03 Vue.js
深入理解Vue的数据响应式
May 15 Vue.js
Vue项目打包、合并及压缩优化网页响应速度
Jul 07 Vue.js
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
Vue实现跑马灯样式文字横向滚动
Nov 23 Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
ant design vue的form表单取值方法
Jun 01 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
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
python之virtualenv的简单使用方法(必看篇)
2017/11/25 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
python 解压pkl文件的方法
2018/10/25 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
python3实现绘制二维点图
2019/12/04 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
北卡罗来纳州豪华家具和家居装饰店:Carolina Rustica
2018/10/30 全球购物
党员教师一句话承诺
2014/05/30 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
小学感恩节活动总结
2015/03/24 职场文书
第一军规观后感
2015/06/12 职场文书
离婚协议书格式范本
2016/03/18 职场文书
文书工作总结(范文)
2019/07/11 职场文书