美文网首页
Vue 的组件通信

Vue 的组件通信

作者: 临安linan | 来源:发表于2019-11-08 20:04 被阅读0次

更多个人博客:(https://github.com/zenglinan/blog)

如果对你有帮助,欢迎star。

Vue 组件通信

父子组件通信

1. props

最常规的父子组件传值方法,在此不多赘述

值得一提的是,子组件中可以用 $attrs 获取父组件传来的所有属性(除了 class、style),从而不用一个个声明 prop

如果不用 prop 声明接收,Vue 会默认将这些属性挂载到 子组件的 dom 根元素上。如果不希望这样,可以设置 inheritAttrs 去除这一默认行为。

export default {
  inheritAttrs: false
}

如果需要传给更深一层的子组件,只需通过 v-bind="$attrs" 传入

2. 分发事件

除了 $emit 可以向父组件分发事件之外

还有一个与 $attrs 类似的一个 api :$listener,可以拿到父组件上的所有事件监听器。同样的,v-on="$listeners" 可以将之传给更深一层的子组件

通过 $listeners.xxx 可以直接触发父组件的 xxx 监听器

3. 插槽

插槽最常见的用法是:在子组件中使用 slot 插槽,在父组件中对其进行填充,可以是具名插槽也可以是匿名插槽。

除了这种用法以外,父组件还可以拿到子组件在插槽上传递的数据,也就是作用域插槽:

子组件中通过 v-bind 绑定数据

<template>
  <div class="child">
    <slot v-bind:data="data"></slot>
  </div>
</template>

父组件中可以通过 v-slot 接收

<child v-slot:default="slotData">
  {{ slotData.data }}
</child>

4. 父组件的共享 — 注入

父组件可以将一些共享的数据注入,后代通过 inject 选项接收后直接可以使用,这些数据将会是共享的。

// 父组件中
provide(){
  return {
    parentData: this.data
  }
}

// 子组件中
inject: ['parentData']
// 通过 this.parentData 即可访问

甚至,你还可以将父组件整个共享:

provide(){
  return {
    parent: this
  }
}

5. 父链子链

通过 this.$parent 可以访问到父组件的数据,this.$parent.$parent 可以访问到爷组件。

与此类似,还有 this.$children

但是过度使用可能会造成代码混乱,尤其是组件嵌套很深时。

非父子组件通信

eventBus

// 父组件
data(){
  return {
    bus: new Vue()
  }
}
provide(){
  return {
    eventBus: this.bus
  }
}

这里借用到上面的注入方法,不过这次注入的是一个 Vue 实例,原因是:这里注入的内容应该是一个事件中心,刚好 Vue 实例提供了 $on $emit 方法,我们可以直接借用

至于为什么要放在 data 中,是因为这样父组件也可以拿到这个 eventBus,也可以进行事件的监听和分发。

在其他组件中接收这个事件中心:

inject: ['eventBus']

当需要监听事件时,只需要通过 $on 添加事件监听器即可:

this.eventBus.$on('change', (data) => {
  // ...
})

当分发一个事件后,所有监听了这个事件的组件都会触发回调,拿到传递的数据:

this.$eventBus.$emit('change', someData)

相关文章

  • 【Vue】组件通信(任意通信)

    本节所需的基础知识: 【Vue】组件通信(父传子props) 【Vue】组件通信(子传父$emit) 任意组件相互...

  • vue组件之间通信

    vue 组件之间通信 vue组件之间通信方式: 1.父组件通过props向下传数据给子组件,子组件通过$emit事...

  • Vue相关知识点

    1、vue父子组件之间的通信 在vue组件通信中其中最常见通信方式就是父子组件之中的通性,而父子组件的设定方式在不...

  • vue 组件通信方式 ,父子、隔代、兄弟 三类通信,六种方法

    Vue 组件间通信只要指以下 3 类通信:父子组件通信、隔代组件通信、兄弟组件通信,下面分别介绍每种通信方式且会说...

  • Vue如何实现组件通信?

    Vue组件通信的三种情况: 父子通信 爷孙通信 兄弟通信 父子通信:父组件使用Prop向子组件传递数据,子组件通过...

  • Vue组件通信

    Vue组件通信 Vue组件关系可分为三大类: 父子组件 兄弟组件 跨级组件, 相应的组件之间的通信也分类三大类: ...

  • vue组件间通信的一些实用方法(VUE2.x)

    vue组件间通信的一些实用方法(VUE2.x) 一、父子组件间通信 常用的父子组件通信方法,一般涉及props和$...

  • VUE组件(传值,生命周期)

    VUE生命周期 VUE子传父组件通信 VUE非父子组件传值

  • Vue组件通信

    总体来说,Vue中组件之间的通信场景如下图: 可以将其分为父子组件通信、兄弟组件通信、跨级组件通信。 1. 自定义...

  • Vue组件通信方式

    本文主要介绍关于Vue组件通信的四种方式,分别是父向子组件通信、子向父组件通信、非父子组件的EventBus通信、...

网友评论

      本文标题:Vue 的组件通信

      本文链接:https://www.haomeiwen.com/subject/rdiwbctx.html