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 24 Vue.js
Vue3+elementui plus创建项目的方法
Dec 01 Vue.js
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
vue编写简单的购物车功能
Jan 08 Vue.js
vue自定义组件实现双向绑定
Jan 13 Vue.js
Vue实现简单计算器
Jan 20 Vue.js
vue keep-alive的简单总结
Jan 25 Vue.js
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
Feb 20 Vue.js
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
Vue通过懒加载提升页面响应速度
May 10 Vue.js
vue-cropper插件实现图片截取上传组件封装
May 27 Vue.js
vue router 动态路由清除方式
May 25 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读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
JavaScript中的定时器之Item23的合理使用
2015/10/30 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
前端axios下载excel文件(二进制)的处理方法
2018/07/31 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
python字符串排序方法
2014/08/29 Python
详解Django中Request对象的相关用法
2015/07/17 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
python随机生成库faker库api实例详解
2019/11/28 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
Python 绘制可视化折线图
2020/07/22 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
通过代码实例了解Python异常本质
2020/09/16 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
秋季运动会活动方案
2014/02/05 职场文书
理想演讲稿范文
2014/05/21 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python