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项目利用axios请求接口下载excel
Nov 17 Vue.js
vue 插槽简介及使用示例
Nov 19 Vue.js
vue使用exif获取图片经纬度的示例代码
Dec 11 Vue.js
全面解析Vue中的$nextTick
Dec 24 Vue.js
vue中使用echarts的示例
Jan 03 Vue.js
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 Vue.js
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
Feb 23 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
vue实现倒计时功能
Mar 24 Vue.js
vue实现移动端div拖动效果
Mar 03 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 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的输入输出流
2007/02/14 PHP
set_include_path在win和linux下的区别
2008/01/10 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
php处理静态页面:页面设置缓存时间实例
2017/06/22 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
JS的replace方法详细介绍
2012/11/09 Javascript
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
Python Django使用forms来实现评论功能
2016/08/17 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
python dict乱码如何解决
2020/06/07 Python
Python识别验证码的实现示例
2020/09/30 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
护士求职信
2014/07/05 职场文书
办公室岗位职责
2015/02/04 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技