標題換一種說法:vue $emit 調用父組件異步方法,執行完畢後再執行子組件的某方法
使用回調的形式
異步方法執行完成的時間只有父組件知道,如果子組件需要在異步方式執行之後執行某些邏輯,那麼只能將這些邏輯封裝成一個方法傳遞到父組件,由父組件來觸發執行。
父組件
// 父組件的html中添加事件 @getData="getData"
methods : {
getData(params, callback) {
console.log("子組件的傳遞到父組件的參數", params);
console.log("模擬發送後臺異步請求,延遲3s...");
setTimeout(() => {
//.....
console.log("異步請求結束,執行回調函數");
callback("父組件666")
}, 3000)
}
}
子組件
// 通過 $emit 觸發父組件的方法
// 參數:觸發的事件名稱、事件參數,事件參數
// 把方法當做事件參數傳遞到父組件,由父組件調用執行。
this.$emit('getData', 10, (res)=> {
console.log("父組件的返回結果:", res); //由父組件調用
})
reference:
vue $emit 調用父組件異步方法,執行完畢後再執行子組件的某方法
end