vue兄弟組件的相互通訊(vuex方式)


需求:在首頁(index.vue)調用了組件A(componentA.vue),和組件B(componentB.vue),想通過主鍵B的點擊事件,觸發組件A的事件

步驟:

1.先安裝vuex,執行 npm install vuex --save代碼,安裝vuex

2.在main.js文件中導入vuex,代碼如下:

import Vue from 'vue'
import App from './App'
import router from './router'
import vuex from 'vuex'
Vue.config.productionTip = false
Vue.use(vuex)
/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

3.在根目錄下創建文件夾:vuex,然后添加store.js文件,store.js文件代碼如下:

import vue from 'vue'
import Vuex from 'vuex'
vue.use(Vuex)
const state={
    count:1
}

const mutations={
    add(state){
        state.count++;
    }
}

export default new Vuex.Store({
    state,mutations
})

4.在index.vue中引用A組件和B組件,代碼如下:

<template>
  <div>
      <h1>組件A調用</h1>
      <compontentA></compontentA>
      <h1>組件B調用</h1>
      <compontentB></compontentB>
  </div>
</template>

<script>
import compontentA from './componentA'
import compontentB from './componentB'
export default {
  data() {
    return {
      msg: "Welcome to Your Vue.js App"
    };
  },
  components:{
    compontentA,
    compontentB
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1,
h2 {
  font-weight: normal;
}
ul {
  list-style-type: none;
  padding: 0;
}
li {
  display: inline-block;
  margin: 0 10px;
}
a {
  color: #42b983;
}
</style>

5.組件A代碼:

<template>
    <div>
        <h1>我是組件A</h1>
        {{$store.state.count}}
    </div>
</template>
<script>
import store from '@/vuex/store'
export default {
    data(){
        return{
            result:0
        }
    },
    created(){
     
    },
    store,
    methods:{
      watchstore(){
          alert("從B組件觸發A組件");
      }
    },
    watch:{
      '$store.state.count':function(val){
         this.watchstore(); }
    }
}
</script>
<style scoped>

</style>

描紅部分注意,監聽狀態的方式和監聽其他變量和方法的方式有點不一樣,代碼:

 '$store.state.count':function(val){
         this.watchstore();
      }

6.組件B代碼如下:

<template>
    <div>
        <h1>我是組件b,利用組件b的事件,控制狀態,達到修改組件A的目的</h1>
        <button @click="$store.commit('add')">操作狀態+1</button>
      
    </div>
</template>
<script>
import store from '@/vuex/store'
export default {
    store,
    methods:{

    }
}
</script>
<style scoped>

</style>

以上步驟就可以達到使用組件B的點擊事件控制組件A的內部方法的效果,vuex的細節應用,我們下次具體討論,本次關鍵點在於A組件的監聽。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM