前言項(xiàng)目框架:Vue3 + TypeScript
有這樣一個(gè)需求,系統(tǒng)默認(rèn)只有最基礎(chǔ)的幾個(gè)路由,如登錄、404等,其它路由需要在登錄后動態(tài)添加 。系統(tǒng)沒有固定首頁,登錄完成后跳轉(zhuǎn)至動態(tài)菜單的第一個(gè)菜單頁 。
分析這一邏輯乍一看很簡單,其實(shí)有很多小坑在里面 。其中最容易踩的的坑是動態(tài)路由尚未渲染完成就已經(jīng)觸發(fā)路由跳轉(zhuǎn)了,這時(shí)候肯定是404,因?yàn)槁酚刹⒉淮嬖?;另一個(gè)容易踩的坑是路由重復(fù)加載 , 此時(shí)頁面會顯示空白,需要手動刷新才能正常顯示 。
首先想到的就是使用 Promise 函數(shù)解決,結(jié)果行不通 。addRoute 是一個(gè)宏任務(wù) 和 resolve 是微任務(wù),所以 Promise 結(jié)束的時(shí)候并不能代表動態(tài)路由已經(jīng)添加完成 。
其次又想到使用 async 函數(shù)來確保獲取到登錄成功結(jié)果的時(shí)候,路由已經(jīng)添加完成,結(jié)果一番嘗試后依然行不通 。因?yàn)樘砑勇酚傻牟僮鞑皇钱惒降?,沒有返回 Promise 對象,因此這里的 await 是不會產(chǎn)生效果的 。(PS:事后使用 Promise.all 解決了這一問題 , 后面的具體方法上會說 。)
最后,想到了一個(gè)很笨的解決方法,輪詢 。實(shí)驗(yàn)過后,確定可以實(shí)現(xiàn),但就如開頭說的,這會顯得很 low ,雖然它最終解決了問題 。
實(shí)踐登錄的操作都是一樣的,所以單獨(dú)拿出來只寫一遍 。表單就不做介紹了,就從點(diǎn)擊登錄表單校驗(yàn)通過后說起 。
所有登錄的代碼放到一個(gè)頁面會顯得臃腫,所以具體登錄的操作邏輯我把它抽離了出來 。在 src/utils 目錄下創(chuàng)建一個(gè) auth.ts 文件 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時(shí)就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 如何在路由器中設(shè)置P2P下載限制
- 如何正確重啟H3C ER3100路由器【詳細(xì)步驟】
- 如何正確綁定優(yōu)酷路由寶賬號?
- 如何在Word 2010中設(shè)置表格的頁面對齊方式
- 如何處理Word表格右邊的邊框超出頁面問題
- 解決TP-LINK路由器顯示設(shè)備已離線的方法
- 如何在小米路由器上進(jìn)行UPnP設(shè)置
- 如何在Excel 2013中手動調(diào)整頁面邊距
- 如何在Word2003中進(jìn)行頁面設(shè)置
- 如何快速旋轉(zhuǎn)PDF文件的頁面方向
