vue 組件間通訊

總結(jié)起來三種方式

一、eventbus

bus.js

import Vue from 'vue'
export default new Vue()//生成一個vue的實例

component1.vue

import Bus from './bus.js'
<script>
export default{
      methods:{
          busToComponent2(){
            let data={a:1,b:2}
            Bus.$emit('callCompoent2',data)
          }
      }
}
</script>

component2.vue

import Bus from './bus.js'
<script>
export default{
      created(){
          Bus.$on('callCompoent2',this.dataCallback) 
      },
      methods:{
            dataCallback(){
              //...dosomething
            }
      }
}
</script>

二、vuex

store.js

import Vuex from 'vuex'
import Vue from 'vue'
Vue.use(vuex)
export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  }
})

app.js

import store from './store.js'
new Vue({
    store:store//全局注入,這樣才能在所有組件中使用$store
})

com1.vue

import {mapState} from 'vuex'
<template>
   <div>
       <div @click="">通過方法調(diào)用<div>
       <div @click="$store.commit('increment')">直接調(diào)用<div>
       <div @click="add">通過方法調(diào)用<div>
  <div>
</template>
<script>
export default{
    methods:{
          add(){
            this.$store.commit('increment')//方法里面需要加this
             //錯誤的使用方式 this.$store.state.count++
          }
    }
}
</script>

com2.vue

<template>
     <div>
         {{count1}}<br/>
         {{count2}}
    <div>
</template>
<script>
export default{
    data(){
        return {
            count1:this.$store.state.count  
        }
    
    },
    computed:{
      ...mapState({
            count2:state=>state.count//這里取了個別名count2
      //data里面的count1只會在初始化的時候獲取一次,
      //這里的count2是根據(jù)store.js里面的count變化而變化的,
      //這是計算屬性的強大之處
      })
    }
}
</script>

在組建1中點擊按鈕 你會發(fā)現(xiàn)組件2中的數(shù)據(jù)count2發(fā)生了變化

三、通過層級與組件的name去查找

組件1的name 是table 。子組件name是td ??梢允褂胻his.$parent遞歸查找最近的name為table父組件,類似于原生的dom對象查找。就算中間有一層tr也沒有關(guān)系,找到這個組件就可以用$emit()進行通訊了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容