美文网首页
不用vuex的case下,隔代组件间的通信

不用vuex的case下,隔代组件间的通信

作者: JokiZhou | 来源:发表于2019-04-11 21:25 被阅读0次

原理:参考了Vue.js 1.x中的 dispatch 和 broadcast的特性

适合开发层级不会很复杂的独立组件

缺点:依赖组件树的结构,比如需要知道A和B谁是父,谁是子,然后父中broadcast,子中dispatch。

先列一个简单的case,参考vue文档:
子组件

export default {
  methods: {
    handleEmitEvent () {
      this.$emit('test', 'Hello Vue.js');
    }
  }
}

父组件

<template>
  <child-component @test="handleEvent">
</template>
<script>
  export default {
    methods: {
      handleEvent (text) {
        console.log(text);  // Hello Vue.js
      }
    }
  }
</script>

子组件触发,父组件监听。
So, 既然是子组件自己触发的,那它自己也可以监听到,
即组件自己监听自己的emit。

<template>
  <div>
    <button @click="handleEmitEvent">触发自定义事件</button>
  </div>
</template>
<script>
  export default {
    methods: {
      handleEmitEvent () {
        this.$emit('test', 'Hello Vue.js')
      }
    },
    created () {
      this.$on('test', (text) => {
         console.log(text) // Hello Vue.js
      });
    }
  }
</script>

乍看多次一举, handleEmitEvent可以直接写逻辑,没必要emit,on

划重点

如果handleEmitEvent不是通过该组件自身调用的呢?

设想这样的场景,A是父组件,B是子组件,中间可能跨多级。
A向B通信:
A.vue

<template>
    <input @focus="handleFocus" />
</template>
<script>
  import Emitter from '../mixins/emitter.js'; // 先忽略混入的内容
  export default {
    name: 'componentA',
    mixins: [ Emitter ],
    methods: {
      handleFocus () {
        this.broadcast('componentB', 'sendMessage', '我被点了');
      }
    }
  }
</script>

B.vue

<script>
export default {
  name: 'componentB',
  created () {
    this.$on('sendMessage', this.showMessage)
  },
  methods: {
    showMessage (text) {
      console.log(text); // 我被点了
    }
  }
}
</script>

这里B监听的事件触发源是A组件中的input,具体调用emit sendMessage的地方其实还是在B组件中,不然B怎么会监听到呢?
其中究竟隐藏着怎样的秘密?
且听下回分解。
写的比较粗糙..
要去接人了。

Core Codes

to be continued...

相关文章

  • 不用vuex的case下,隔代组件间的通信

    原理:参考了Vue.js 1.x中的 broadcast的特性 适合开发层级不会很复杂的独立组件 缺点:依赖组件...

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

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

  • vuex

    vuex vuex是状态管理模式。 回顾下组件间的通信 需求:比如在我们的博客中,每个组件中都需要用户的登录状态以...

  • Vue 组件间通信方法汇总

    除了使用 Vuex 方法外,vue 提供了各种各样的组件间通信的方案。文章整理一下父子组件、兄弟组件、祖先后代组件...

  • vue中的组件间通信

    父子组件相互通信 非父子组件间通信 关于vuex请查阅: https://www.jianshu.com/writ...

  • Vuex 状态管理

    Vue组件间通信方式 Vuex核心概念和基本使用 购物车案例 模拟实现vuex 一、组件内的状态管理流程 状态管理...

  • Vuex简单上手

    Vuex Vuex是Vue.js应用的状态管理模式目前开发项目中,主要用于保存组件状态,保证兄弟组件间的通信。 首...

  • 创建单页应用

    Vue.js + Vue Router 创建单页应用, 使用vuex还管理组件间的通信。 State:存放组件之间...

  • Vuex集中式状态管理

    目录 组件化 组件通信 状态管理 Vuex 是什么 Vuex 有什么特点 Vuex 解决了什么问题 什么类型的数据...

  • 学习笔记(十八)Vuex状态管理

    Vuex状态管理 组件状态管理及组件间通信回顾 状态管理 状态集中管理和分发,解决多个组件共享状态的问题 状态自管...

网友评论

      本文标题:不用vuex的case下,隔代组件间的通信

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