• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

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

其他 菜小牛 1952次浏览 0个评论

目录

  • Vue使用Ref跨层级获取组件实例
    • 示例介绍
    • 文档目录结构
    • 安装vue-ref
    • 根组件自定义方法[使用provide和inject]
    • 分别说明各个页面
    • 结果

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

示例介绍

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

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

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

文档目录结构

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

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

页面样式如下:

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

安装vue-ref

  1. 下载vue-ref

npm install vue-ref –save

  1. 全局注册
import ref from 'vue-ref'
Vue.use(ref)
  1. 使用方法
<!-- 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页面中,提供了三个方法:分别用来:

  1. 设置子组件的实例,setChildrenRef
  2. 获取自组件实例, getChildrenRef
  3. 获取当前节点实例, 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跨层级获取组件实例
喜欢 (0)

您必须 登录 才能发表评论!

加载中……