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

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获取组件的资料请关注小牛知识库其它相关文章!

 类似资料:
  • antd-vue1.7版本中的select下拉框组件,是否可以通过获得该组件的dom结构后再获得vue对象后获取到该组件的value值 我司有个需求是这样的,在一个已有系统的基础上做一个引导系统,点击内容后进行下一步。 比如有一个引导是,1、点击创建按钮。2、选择下拉框某一个值。3、填写输入框。4、点击确定按钮 完成上一步的内容才可以进行下一步 由于不可以改动已有的页面结构和内容所以不可以给结构加

  • vue3使用了unplugin-vue-components引入elementplus组件后,如何在写ts的时候获取组件类型? 这个文件好像只对template里的组件才有提示,现在我需要获取组件的方法,let treeRef = ref() 使用ref之后,treeRef.value 不提示组件内部方法,然后我手动引入了el-tree组件,写成了let treeRef = ref<intance

  • defineExpose如何处理ref获取到的组件方法。如把el-form的方法暴露出去。通过ref获取。但是defineExpose处理时。el-form还未获取到。导致暴露为null 如下一个form 通过ref获取 暴露给defineExpose由于此时formRef.value为null.暴露失败目前是通过自定义方法调用暴露。有好方法处理这个问题吗

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

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

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