美文网首页react & vue & angular
浅谈vue非父子组件通信

浅谈vue非父子组件通信

作者: 壮壮仔儿 | 来源:发表于2022-06-22 21:40 被阅读0次

我们实际编写项目时往往离不开组件之间的相互通信,但是这之间如何通信呢?一般大家可能首先想到props,或者是vuex,今天老将军换个新把式,咱说下另外两个

  • provide和inject
  • mitt
    ok,先说第一个,provide和inject。
    它用于父组件向子孙组件传递数据,provide在父组件中提供要传给下级的数据,inject在需要使用这个数据的子辈组件或者孙辈等下级组件中使用数据。
    可能会有小伙伴有疑问那我props也是一样的啊,那试想一下我们有一个大型组件树,并且一个深度嵌套的组件需要来自远距离祖先组件的数据。如果使用 props,我们就需要在整个父链中传递相同的 props,那不忒麻烦了,自己都写不耐烦了而且容易出错。在此简单举例:


    props1.png

    改为Provide / Inject方式后


    props2.png
    具体代码
//APP.vue
......
  provide() {
    return {
      name: "leah",
      age: 883,
    };
  },
//HomeContent.vue
<script>
    export default {
        inject:["name","age"]
    }
</script>

provide可以使用对象形式,但是如果我们需要提供每个实例的状态,例如通过 声明的数据data(),那么provide必须使用函数值。此外,如果为了使provide链接到data中的数据,我们需要使用computed()函数提供一个计算属性

 provide() {
    return {
      message: computed(() => this.xxx)
    }
  }

大家都知道props是有默认值的,在没有值传递过来时默认数值是多少,那inject有没有呢,答案是有的,如果我们provide没有传递值时HomeContent.vue可以改为

export default {
  inject: {
    name: {
      default: "leah",
    },
    age: {
      default: "12",
    },
  },
};

如果想使用别名,下面是将name改为testName,如果再使用,那就不是用this.name,而是this.testName

  inject: {
    testName: {
      from: "name",
      default: "12313",
    },
  },

接下来再说一下mitt,vue2.x有EventBus,3把它去掉了。我们可以使用mitt创建一个3的事件车。mitt是一个体积极小的第三方消息发布/订阅式JavaScript库,与框架无关,所以不论是React还是Vue都可以用,示例:

//导入
import mitt from "mitt"
const emitter=mitt()
export default emitter
//用法
import emitter from "xxx";
//触发调用
emitter.emit("clickMe", { xx:xxx });
//监听某一emitter
emitter.on('clickMe', clickMe)   // listen
//监听所有emitter
emitter.on('*', (type, e) => console.log(type, e) ) //type为方法名,e为传递的数据
//取消所有emitter监听
emitter.all.clear()
//创建及移除
function clickMe {}
emitter.on('clickMe', clickMe)   // listen
emitter.off('clickMe', clickMe) 

铛铛铛~撒花完结🎉,如有不对,欢迎指正

相关文章

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

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

  • 09-生命周期及非父子组件间的通信

    一. Vue生命周期 二、生命周期代码 三、非父子组件通信 vue中非父子组件通信需要借助一个空的vue实例,案...

  • 浅谈vue非父子组件通信

    我们实际编写项目时往往离不开组件之间的相互通信,但是这之间如何通信呢?一般大家可能首先想到props,或者是vue...

  • 生命周期,组件通信、插槽

    一、生命周期 二、组件通信 Vue只有两种关系, 父子组件 非父子组件 1.父子通信:当我们需要把父组件中的数据传...

  • vue第七节

    Vue里组件的通信 通信:传参、控制(A操控B做一个事件)、数据共享 模式:父子组件间、非父子组件 父组件可以将一...

  • Vue组件通信方式

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

  • Vue相关知识点

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

  • vue中的组件通信

    一、组件通信(组件传值) 1.1父子组件通信 1.2子父组件通信 1.3非父子组件通信(兄弟组件通信)

  • vue组件通信,中央事件总线

    vue 组件通信分为父组件与子组件通信、子组件与父组件通信、非父子关系组件通信三种 第一种大家都知道用props,...

  • vue组件如何通信?有几种方式?

    在vue中组件通讯可以分为父子组件通讯和非父子组件通信。父组件通过props的方式向子组件传递数据,而子组件可以通...

网友评论

    本文标题:浅谈vue非父子组件通信

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