vue 组件通信

vue组件通信方式

1、vuex 通过vuex内的state对象定义共享属性,通过mutations/actions/getters对象内定义方法来修改state对象内的属性,需要使用共享属性的组件通过import {mapstate/mapmutations/getters/mapactions} 然后在页面中使用/调用,看详情

2、父子组件之间:

  父组件 => 子组件 :在父组件中import子组件,component对象中加入子组件名称,在template中加上子组件标签,在子组件标签上绑定需要传输的属性,在子组件中通过props,就可以使用了。父组件调用子组件方法

  子组件 => 父组件:在子组件中通过this.$emit('parentObserve',params)广播自定义事件parentObserve,父组件中在组件标签上监听该事件,进行事件处理。this.$parent.event/props 调用父组件方法或者属性

3、兄弟组件:

  a、新建一个js文件eventBus,js,事件车相当于一个中间件引入vue,new vue()并开放出来

import Vue from 'vue'

export default new Vue

  b、在需要通信的兄弟组件之间引入eventBus.js,

   兄弟组件a.vue

import eventBus from '../eventBus.js'
export
default { data () { return { } }, created () { }, methods: { showChange (params) {   eventBus.$emit('searchData', params) //通过eventBus.$emit对外广播searchData事件,其他组件可以在created中通过eventBus.$on进行事件监听
    }
} }

  c、兄弟组件b:注意:当卸载组件前要通过beforeDestroy将当前监听的事件删除掉,通过eventVue.$off(name)删除,因为就算组件被卸载但是监听事件不会被删除,而再次进入页面时又会添加新的事件监听,导致有多个事件监听,所以会多次触发事件程序。

import eventBus from '../eventBus.js'
export default {

    data () {
        return {
        }
    },
    created () {
        eventBus.$on('searchData', (params) => {//通过eventBus.$on监听searchData,并进行事件处理
       console.log('监听到a组件的searchData事件,并处理事件程序')
        })
    },
    methods: {

    }
}
原文地址:https://www.cnblogs.com/muzs/p/10729922.html