vue使用$emit實(shí)現(xiàn)同步調(diào)用
vue $emit同步調(diào)用
標(biāo)題換一種說法:vue $emit 調(diào)用父組件異步方法,執(zhí)行完畢后再執(zhí)行子組件的某方法
1.使用回調(diào)的形式
異步方法執(zhí)行完成的時(shí)間只有父組件知道,如果子組件需要在異步方式執(zhí)行之后執(zhí)行某些邏輯,那么可以將這些邏輯封裝成一個(gè)方法傳遞到父組件,由父組件來觸發(fā)執(zhí)行。
- 父組件
// 組件的html中添加事件 @getData="getData" methods : { getData(params, callback) { console.log("子組件的傳遞到父組件的參數(shù)", params); console.log("模擬發(fā)送后臺異步請求,延遲3s..."); setTimeout(() => { console.log("異步請求結(jié)束,執(zhí)行回調(diào)函數(shù)"); callback("父組件傳到子組件的文本666") }, 3000) } }
- 子組件
// 通過 $emit 觸發(fā)父組件的方法 // 參數(shù):觸發(fā)的事件名稱、事件參數(shù),事件參數(shù) // 把方法當(dāng)做事件參數(shù)傳遞到父組件,由父組件調(diào)用執(zhí)行。 this.$emit('getData', 10, (res)=> { console.log("父組件的返回結(jié)果:", res); //由父組件調(diào)用 })
2.通過$refs調(diào)用組件方法的形式
異步方法執(zhí)行完成的時(shí)間只有父組件知道,如果子組件需要在異步方式執(zhí)行之后執(zhí)行某些邏輯,那么可以通過 $refs 拿到子組件的實(shí)例,調(diào)用其方法父組件
// 組件的html中添加事件 @getData="getData",添加 ref="childRef" methods : { getData(params) { console.log("子組件的傳遞到父組件的參數(shù)", params); console.log("模擬發(fā)送后臺異步請求,延遲3s..."); setTimeout(() => { console.log("異步請求結(jié)束,通過 $refs 調(diào)用組件方法"); this.$refs.childRef.doSomeThing("數(shù)據(jù)"); }, 3000) } }
子組件
methods : { doSomeThing(data) { console.log("父組件的返回結(jié)果:", res); //由父組件調(diào)用 } } // 通過 $emit 觸發(fā)父組件的方法 // 參數(shù):觸發(fā)的事件名稱、事件參數(shù),事件參數(shù) // 把方法當(dāng)做事件參數(shù)傳遞到父組件,由父組件調(diào)用執(zhí)行。 this.$emit('getData', 10)
vue前端方法同步調(diào)用,防止異步順序錯(cuò)誤
因?yàn)楫惒郊虞d的原因
如下所示的代碼,打印順序?yàn)椋?11,333,222)。
解決方法
改成同步調(diào)用使用async和await進(jìn)行方法同步。
則順序就是(111,222,333)就是我們想要的期待的順序
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue實(shí)現(xiàn)登錄、注冊、退出、跳轉(zhuǎn)等功能
這篇文章主要介紹了vue實(shí)現(xiàn)登錄、注冊、退出、跳轉(zhuǎn)等功能,需要的朋友可以參考下2020-12-12vue element-ui里的table中表頭與表格出現(xiàn)錯(cuò)位的解決
這篇文章主要介紹了vue element-ui里的table中表頭與表格出現(xiàn)錯(cuò)位的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Vue computed 計(jì)算屬性代碼實(shí)例
在本篇文章里小編給大家分享的是關(guān)于Vue computed 計(jì)算屬性代碼實(shí)例,需要的朋友們可以參考下。2020-04-04如何使用Gitee Pages服務(wù) 搭建Vue項(xiàng)目
這篇文章主要介紹了如何使用Gitee Pages服務(wù) 搭建Vue項(xiàng)目,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10Vue項(xiàng)目打包問題詳解(生產(chǎn)環(huán)境樣式失效)
在Vue開發(fā)過程中,項(xiàng)目的打包是一個(gè)非常重要的步驟,下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目打包問題(生產(chǎn)環(huán)境樣式失效)的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12vue任意關(guān)系組件通信與跨組件監(jiān)聽狀態(tài)vue-communication
這篇文章主要介紹了vue任意關(guān)系組件通信與跨組件監(jiān)聽狀態(tài)vue-communication,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10