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中defineProperty和Proxy的区别详解
Nov 30 Vue.js
vue中利用three.js实现全景图的完整示例
Dec 07 Vue.js
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
vue实现验证用户名是否可用
Jan 20 Vue.js
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
Vue-Element-Admin集成自己的接口实现登录跳转
Jun 23 Vue.js
idea编译器vue缩进报错问题场景分析
Jul 04 Vue.js
vue中 this.$set的使用详解
Nov 17 Vue.js
vue实现移动端div拖动效果
Mar 03 Vue.js
关于Vue中的options选项
Mar 22 Vue.js
vue @click.native 绑定原生点击事件
Apr 22 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 SQL之where语句生成器
2009/03/24 PHP
PHP关联链接常用代码
2012/11/05 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
2015/12/14 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
javascript 异常处理使用总结
2009/06/21 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐)
2016/06/23 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
Python中装饰器的一个妙用
2015/02/08 Python
浅析Git版本控制器使用
2017/12/10 Python
pandas带有重复索引操作方法
2018/06/08 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
python操作toml文件的示例代码
2020/11/27 Python
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
空字符串(“”)和null的区别
2012/11/13 面试题
HttpServlet类中的主要方法都有哪些?各自的作用是什么?
2014/03/16 面试题
《老山界》教学反思
2014/04/08 职场文书
《观舞记》教学反思
2014/04/16 职场文书
公司节能减排倡议书
2014/05/14 职场文书
运动会闭幕词
2015/01/28 职场文书
《好妈妈胜过好老师》:每个孩子的优秀都是有源头的
2020/01/03 职场文书
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js