美文网首页
vue的非父子组件通信

vue的非父子组件通信

作者: 灯光树影 | 来源:发表于2018-10-25 18:23 被阅读0次

一 、前言

vue是一个视图层框架,不是一个数据层框架。对于非父子组件之间的通信,仅仅使用简单的父子组件间接实现,不仅繁琐,而且降低性能。因此,需要使用一些方法解决,主要解决方法是使用bus总线或者vuex。

二、bus总线

bus总线其实是挂载在Vue的原型对象中的一个vue实例。利用所有组件都能访问这个实例的特点,结合$emit和$on来实现组件通信。

<div id="app">
    <counter :count="count"></counter>
    <counter :count="count"></counter>
</div>
<script>
Vue.prototype.bus = new Vue();
var counter = {
    props: ['count'],
    data: function(){
        return {
            number: this.count
        };
    },
    methods: {
        addOther: function(){
            this.bus.$emit('add-count', this, this.number);
        }
    },
    template: `<p @click="addOther">{{ number }}</p>`,
    mounted: function(){
        var that = this;
        this.bus.$on('add-count', function(obj){
            console.log(this); // bus
            if(obj !== that){
                that.number++;
            }
        });
    }
};
var app = new Vue({
    el: '#app',
    data: {
        count: 0
    },
    components: {
        counter: counter
    }    
});
</script>

上面代码实现点击一个计数器,另外的计数器加1的效果。

提示:使用this.bus.&dollar;emit向外触发事件,使用this.bus.&dollar;on监听事件。
注意:this.bus.$on中的this指向bus,不是指向原来组件中的this

三、vuex

vuex的工作流程图:

image.png

vuex实现组件通信的原理就是将整个项目中的数据都放到一个位置存储,这个数据的仓库叫store,数据也就是状态state。这样,各个组件就可以通过发送操作请求Actions给中间处理器Mutatioins,处理器识别请求并对数据state进行增删改查等操作。数据state更新引起组件的更新。

vuex的基本使用方式是:

  1. 创建一个store --> 路径./store/index.js
import Vuex from 'vuex';
import Vue from 'vue';
// 使用vuex插件
Vue.use(Vuex);
// 创建store
const store = Vuex.store({
  // 数据/状态
  state: {},
  // 操作请求
  actions: {},
  // 中间处理
  mutations: {},
});
export default store;
  1. 将store注入根组件
import store from './store';
var app = new Vue({
  // 将store注入根组件
  store
});
  1. 在各个组件中使用访问store
this.$store
this.$store.state // 访问状态
this.$store.getters // 访问getters
this.$store.dispatch // 发送请求到actions
this.$store.commit // 直接发送请求到mutations

补充:

  1. 对state、getters、actions、mutations都有映射方法mapXXX可以简化多个值的获取
  2. vuex可以将store分割成多个模块,这使用module来实现

相关文章

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

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

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

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

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

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

  • vue第七节

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

  • Vue组件通信方式

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

  • Vue相关知识点

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

  • vue中的组件通信

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

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

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

  • Vue3组件化(二):非父子组件的通信、插槽Slot

    非父子组件的通信 在开发中,我们构建了组件树之后,除了父子组件之间的通信之外,还会有非父子组件之间的通信。这里我们...

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

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

网友评论

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

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