当前位置: 首页 > 编程笔记 >

Vue使用Ref跨层级获取组件的步骤

薛文斌
2023-03-14
本文向大家介绍Vue使用Ref跨层级获取组件的步骤,包括了Vue使用Ref跨层级获取组件的步骤的使用技巧和注意事项,需要的朋友参考一下

Vue使用Ref跨层级获取组件实例

示例介绍

在开发过程中,我们难免会使用到跨层级的ref实例获取,大部分情况下,我们都可以通过组件自身的parent或者children去找到需要的实例。但是当层级不明显或者太深的时候,用此方法难免过于臃肿和低效率。

如下图所示,我们通过组件E去获取组件D的组件实例。

文档目录结构

分别有A、B、C、D、E和index六个组件,并按照上图的组件顺序,分别插入到各自的页面中。

页面样式如下:

安装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页面:

通过注入的方法,获取setChildrenRef方法,并通过上述指令,将组件D缓存起来

组件B页面:

组件C页面:

组件D页面:

组件E页面:

在这个页面中,我们不仅注入了两个方法,还设置了切换D组件颜色的方法,用来测试我们是否真的跨层级获取到了组件D的实例。

结果

可以看到,三个parent的实例是一样的,在组件E中也成功修改了组件D的文字样式。good!

以上就是Vue使用Ref跨层级获取组件的步骤的详细内容,更多关于vue 使用Ref获取组件的资料请关注小牛知识库其它相关文章!

 类似资料:
  • 将所有页面组件一次性加载是一个很浪费资源和考验用户耐心的做法,尤其在移动端。 使用方法 webpack 提供了code splitting,你可以按照下面写法实现当切换到特定路由时才加载代码。 需要注意的是 vue-loader@13.0.0 语法有所变更,具体参照发布说明 v13.0.0 // vue-loader@13.0.0 之前 const Foo = () => import('./Fo

  • 本文向大家介绍Vue通过ref父子组件拿值方法,包括了Vue通过ref父子组件拿值方法的使用技巧和注意事项,需要的朋友参考一下 父拿子的值 子拿父的值 有了ref拿值不能更方便~ 以上这篇Vue通过ref父子组件拿值方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 有什么方法可以在React中使用ref来获取复选框的值。正常方式对我来说总是返回值“ on”。 问题答案: 对于复选框,使用“ checked”而不是“ value”: 结果是:

  • 想要写一个Popover,计算元素位置使用的是floating-ui,需要获取触发元素的Ref和Popover内容的Ref来进行定位。 触发元素和内容通过插槽传入,遇到的问题是如何获取插槽内元素的Ref Popover 伪代码: 使用: 目前我能想到的办法就是在触发元素和内容外套一层div,然后用div的Ref 但是这样就多了一层节点,在想能不能有更好的解决方案?

  • 本文向大家介绍Vue CLI2升级至Vue CLI3的方法步骤,包括了Vue CLI2升级至Vue CLI3的方法步骤的使用技巧和注意事项,需要的朋友参考一下 以下备忘升级至 Vue CLI 3.x 版本后,将项目目录改为新结构时所需做的一些改动。 1. 卸载与安装 注:若要使用 Vue CLI 3,需将 Node 版本升级至 8.9 及以上。 当使用 nvm 管理 node 版本时,可以使用如下

  • 问题内容: 我似乎无法从Yahoo Finance获得CSV股票文件来“成功”加载。我已经测试了来自其他问题的不同回调和建议,但它们似乎都不起作用- 大多数都没有输出任何内容。 这段代码会发出警报(``错误’‘回调),但是可以在网络面板中成功看到CSV文件。网络面板中的数据按预期显示为“ XOM,Exxon Mobile Corpo”(因此确实已加载)。 我想真正的问题是如何获取我知道的数据。我现