vue使用$emit實(shí)現(xiàn)同步調(diào)用
vue $emit同步調(diào)用
標(biāo)題換一種說(shuō)法:vue $emit 調(diào)用父組件異步方法,執(zhí)行完畢后再執(zhí)行子組件的某方法
1.使用回調(diào)的形式
異步方法執(zhí)行完成的時(shí)間只有父組件知道,如果子組件需要在異步方式執(zhí)行之后執(zhí)行某些邏輯,那么可以將這些邏輯封裝成一個(gè)方法傳遞到父組件,由父組件來(lái)觸發(fā)執(zhí)行。
- 父組件
// 組件的html中添加事件 @getData="getData" methods : { getData(params, callback) { console.log("子組件的傳遞到父組件的參數(shù)", params); console.log("模擬發(fā)送后臺(tái)異步請(qǐng)求,延遲3s..."); setTimeout(() => { console.log("異步請(qǐng)求結(jié)束,執(zhí)行回調(diào)函數(shù)"); callback("父組件傳到子組件的文本666") }, 3000) } }
- 子組件
// 通過(guò) $emit 觸發(fā)父組件的方法 // 參數(shù):觸發(fā)的事件名稱、事件參數(shù),事件參數(shù) // 把方法當(dāng)做事件參數(shù)傳遞到父組件,由父組件調(diào)用執(zhí)行。 this.$emit('getData', 10, (res)=> { console.log("父組件的返回結(jié)果:", res); //由父組件調(diào)用 })
2.通過(guò)$refs調(diào)用組件方法的形式
異步方法執(zhí)行完成的時(shí)間只有父組件知道,如果子組件需要在異步方式執(zhí)行之后執(zhí)行某些邏輯,那么可以通過(guò) $refs 拿到子組件的實(shí)例,調(diào)用其方法父組件
// 組件的html中添加事件 @getData="getData",添加 ref="childRef" methods : { getData(params) { console.log("子組件的傳遞到父組件的參數(shù)", params); console.log("模擬發(fā)送后臺(tái)異步請(qǐng)求,延遲3s..."); setTimeout(() => { console.log("異步請(qǐng)求結(jié)束,通過(guò) $refs 調(diào)用組件方法"); this.$refs.childRef.doSomeThing("數(shù)據(jù)"); }, 3000) } }
子組件
methods : { doSomeThing(data) { console.log("父組件的返回結(jié)果:", res); //由父組件調(diào)用 } } // 通過(guò) $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)登錄、注冊(cè)、退出、跳轉(zhuǎn)等功能
這篇文章主要介紹了vue實(shí)現(xiàn)登錄、注冊(cè)、退出、跳轉(zhuǎn)等功能,需要的朋友可以參考下2020-12-12vue element-ui里的table中表頭與表格出現(xiàn)錯(cuò)位的解決
這篇文章主要介紹了vue element-ui里的table中表頭與表格出現(xiàn)錯(cuò)位的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(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à)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10Vue項(xiàng)目打包問(wèn)題詳解(生產(chǎn)環(huán)境樣式失效)
在Vue開(kāi)發(fā)過(guò)程中,項(xiàng)目的打包是一個(gè)非常重要的步驟,下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目打包問(wèn)題(生產(chǎn)環(huán)境樣式失效)的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12vue directive定義全局和局部指令及指令簡(jiǎn)寫(xiě)
這篇文章主要介紹了vue directive定義全局和局部指令及指令簡(jiǎn)寫(xiě),本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11vue中動(dòng)態(tài)控制btn的disabled屬性方式
這篇文章主要介紹了vue中動(dòng)態(tài)控制btn的disabled屬性方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04vue任意關(guān)系組件通信與跨組件監(jiān)聽(tīng)狀態(tài)vue-communication
這篇文章主要介紹了vue任意關(guān)系組件通信與跨組件監(jiān)聽(tīng)狀態(tài)vue-communication,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10