首頁 > 軟體

Vue中一個元件呼叫其他元件的方法詳解(非父子元件)

2022-10-28 14:00:03

前言

Vue中,一個元件呼叫其他元件的方法(非父子元件)

場景——B頁面(元件)想呼叫 A頁面(元件)中的方法;但是兩個頁面(元件)毫無關聯(重新整理 A的資料)。

方式一:參照式

1、當前元件引入將要呼叫方法所屬的元件

這裡我的當前元件要呼叫OrderDetail這個元件的check()方法

import Detail from "./detail.vue";

該方法定義在OrderDetail的methods屬性中

2、當前元件通過該元件methods屬性直接呼叫該方法

// 也可以呼叫 created、data等
Detail.methods.check();

方式二:vuex

使用 VueX 定義一個屬性 ,然後在A頁面 定義一個計算屬性(computed) 再把 vuex 的屬性返回給它,再監聽這個計算屬性,發生變化就呼叫你要執行的方法。

1、src/store/index.js

//  Vuex   全域性
state: { 
	tableStatus:false  
	 	}
 mutations:{  
	changeStatus(state,status) {  //  重複賦值
      state.tableStatus = status;
    },
}

2、被使用元件- A 頁面(元件)

 //  A 頁面(元件)
computed: {  
  status() {  //  計算屬性
    return this.$store.state.tableStatus; //  Vuex 中定義的屬性
  }
},
watch:{
  status() {
    this.getTableList();  //   需要呼叫的方法
  }
},

3、使用觸發頁面-B 頁面(元件)

然後就是在B 頁面定義一個點選事件(舉例),重新給 Vuex中的屬性賦值就行了

//  B頁面(元件)
closePage() {
    let status = this.$store.state.tableStatus;   // 重新賦值
    this.$store.commit("changeStatus", !status);
},

方式三:使用事件匯流排eventBus定義全域性事件

1、src/main.js

 window.eventBus = new Vue();

2、觸發頁面-B元件/釋出事件

window.eventBus.$emit('setFeaturesData', data)  // 帶引數
window.eventBus.$emit('setFeaturesData')  // 不帶引數

3、接收頁面-A元件/訂閱事件

    window.eventBus.$on('setFeaturesData', (data)=>{ // 帶引數
      this.hoveredFeatures = [data]
      this.onClick()
    })

  mounted() {
    this.getTableData()
    window.eventBus.$on('setFeaturesData', ()=>{ // 不帶引數
      this.getTableData()
    })
  },

4、移除事件

window.eventBus.$off('setFeaturesData')

總結

到此這篇關於Vue中一個元件呼叫其他元件(非父子元件)的文章就介紹到這了,更多相關Vue元件呼叫其他元件內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com