麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

千鋒教育

掃一掃進入千鋒手機站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > 在以角度加載頁面之前加載數(shù)據(jù)的簡單方法

在以角度加載頁面之前加載數(shù)據(jù)的簡單方法

來源:千鋒教育
發(fā)布人:syq
時間: 2022-09-19 17:06:31 1663578391

  您可能已經(jīng)嘗試過在 app.component 的 ngOnInit 函數(shù)中執(zhí)行此操作,但意識到您的數(shù)據(jù)需要更早加載。您可能還嘗試過實現(xiàn)解析器,但意識到它們更適合單個路由的上下文。以下是在頁面加載之前加載數(shù)據(jù)的另一種方法,您可能還不知道:APP_INITIALIZER。

1

  定義

  在深入研究代碼之前,讓我們更好地了解APP_INITIALIZER是什么以及它是如何工作的。

  APP_INITIALIZER令牌允許您為應(yīng)用程序提供其他初始化函數(shù)。初始化函數(shù)(您可能已經(jīng)從名稱中收集到)在應(yīng)用初始化期間執(zhí)行。這些函數(shù)的返回類型必須是 void、Promise 或可觀察的。如果從這些函數(shù)中的任何一個返回 Promise 或可觀察量,則應(yīng)用程序僅在它們完成后才初始化。

  簡單來說,我喜歡把它看作是定義一個“啟動”階段,在這個階段中,你可以確保你的應(yīng)用正常運行所需的所有核心數(shù)據(jù)在用戶開始與之交互之前都已加載。

  以下是可以在初始化函數(shù)中加載的內(nèi)容的幾個示例:

  翻譯

  經(jīng)過身份驗證的用戶數(shù)據(jù)

  配置數(shù)據(jù)

  

  為簡單起見,讓我們以加載當(dāng)前經(jīng)過身份驗證的用戶的數(shù)據(jù)為例。

  大多數(shù) Web 應(yīng)用在屏幕右上角顯示當(dāng)前用戶的個人資料圖片和名稱,因此讓我們實現(xiàn)類似的內(nèi)容。我將使用一個新的角度安裝(14.1)和引導(dǎo)5作為CSS:

2

  現(xiàn)在打開您的并導(dǎo)入引導(dǎo):styles.scss

3

  如果您使用的是不同版本的Angular,則某些導(dǎo)入和語法可能會有所不同,因此,如果您要遵循代碼,請注意這一點。

  奠定基礎(chǔ)

  讓我們從創(chuàng)建一個負(fù)責(zé)提供當(dāng)前用戶數(shù)據(jù)的服務(wù)開始,該服務(wù)現(xiàn)在將如下所示:

4

  這將是我們數(shù)據(jù)的默認(rèn)值,直到我們發(fā)出請求以獲取實際的當(dāng)前用戶數(shù)據(jù)。

  讓我們利用這些數(shù)據(jù)并將其顯示在屏幕的右上角。為了簡單起見,我們將直接在應(yīng)用程序組件中執(zhí)行此操作。

  首先,我們注入我們的用戶服務(wù):

5

  然后對于網(wǎng)頁:

6

  我強調(diào)了我們實際顯示用戶的姓名和個人資料圖片的重要部分。

  現(xiàn)在我們已經(jīng)奠定了基礎(chǔ),剩下要做的就是實現(xiàn)一個函數(shù)來獲取實際的用戶數(shù)據(jù),然后查看我們將在何時何地調(diào)用它。

  我不打算為此使用實際的后端服務(wù),而是在我們的資產(chǎn)文件夾中創(chuàng)建一個JSON文件,我們將在其中對數(shù)據(jù)進行硬編碼:

7

  我們將定義負(fù)責(zé)獲取 內(nèi)部數(shù)據(jù)的函數(shù),如下所示:UserService

8

  不要忘記導(dǎo)入 中的 .HttpClientModuleAppModule

  實現(xiàn)APP_INITIALIZER

  正如我們在定義部分中了解到的那樣,APP_INITIALIZER讓我們定義其他初始化函數(shù),因此現(xiàn)在讓我們在單獨的文件中定義一個。

9

  您可以根據(jù)需要命名文件和函數(shù)。我主要堅持使用更通用的名稱,因為我通常使用.如果您更喜歡以不同的方式執(zhí)行,則可以命名此函數(shù)或類似名稱(因為這是它唯一執(zhí)行的操作),然后創(chuàng)建單獨的函數(shù)來加載您可能需要的任何其他數(shù)據(jù)。forkJoinloadUserDataFactory

  現(xiàn)在,唯一要做的就是將此函數(shù)標(biāo)記為APP_INITIALIZER以便 Angular 知道在應(yīng)用初始化期間執(zhí)行它。為此,我們需要將以下提供程序添加到 AppModule 中的提供程序數(shù)組中:

10

  就是這樣。如果現(xiàn)在刷新頁面,您應(yīng)該會看到一個大約 1 秒的空白頁(由于我們在獲取 JSON 文件時添加的延遲),之后頁面將加載,并在右上角顯示實際的用戶名和頭像(在 user.json 文件中指定的用戶名和頭像)。

  需要考慮的事項

  可能最重要的一點是,如果從任何初始值設(shè)定項函數(shù)錯誤返回的可觀察值,則應(yīng)用將不再初始化。在我們的示例中,您可以通過重命名或臨時刪除文件來查看此操作,這將導(dǎo)致 Observable 失敗并顯示 404 錯誤。因此,您將被困在最初的空白頁上。

  若要阻止這種情況發(fā)生,請始終確保使用運算符捕獲任何潛在錯誤,并為數(shù)據(jù)提供默認(rèn)值或?qū)⒂脩糁囟ㄏ虻教囟ǖ腻e誤頁面,您可以在其中向他們提供出錯的詳細(xì)信息以及如何繼續(xù)前進。在我們的示例中,重定向到錯誤頁面可能如下所示 - 如果您想嘗試此操作,請不要忘記通過更新 AppModule 中提供程序的鍵來將 添加為依賴項,然后創(chuàng)建新頁面及其路由:user.json catchError Router deps

11

  您看到 1 秒鐘的空白頁實際上是 .發(fā)生這種情況的原因是,由于在可觀察完成之前未初始化應(yīng)用,因此不會填充該元素,因此您看不到任何內(nèi)容。我通常做的是添加一個加載的圖像/文本作為元素的子級。當(dāng)應(yīng)用完成初始化時,你放入 其中的任何內(nèi)容都將被覆蓋。我給你一個例子,你可以在下面嘗試。如果要使用它,請考慮在初始化AppFactory函數(shù)中增加可觀察量的延遲。index.html<app-root><app-root><app-root>

12

  習(xí)慣使用 RxJS(除非你使用的是承諾),因為通常情況下,你需要使用一堆 RxJS 函數(shù)和運算符才能獲得正確的結(jié)果,是我經(jīng)常在這樣的情況下使用的。例如,在我們的示例中,我們只處理了用戶登錄時的情況,但如果用戶實際上是訪客,該怎么辦?在這種情況下,我們可能希望堅持使用我們定義的默認(rèn)數(shù)據(jù)。在單個流中執(zhí)行此操作的一種方法看起來像這樣 - 請記住,這只是一個示例,由于我們尚未一起定義任何內(nèi)容,因此在當(dāng)前項目中不會開箱即用 :forkJoin iif switchMap map catchError tap authService

13

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
快速通道
主站蜘蛛池模板: 你看桌子上都是你流的| 欧美激情第1页| 欧美午夜不卡| 九九热爱视频精品| 中文字幕精品视频在线观| 特大巨黑吊aw在线播放| 伊人a.v在线| 韩国爸爸的朋友10整有限中字| 成年性视频| 成年女人a毛片免费视频| 美女的让男人桶爽网站| 亚洲国产欧美日韩精品一区二区三区| 国产黄色大片网站| 大胸姐妹在线观看| 热久久最新视频| 一本色道久久88加勒比—综合| 日本漫画大全无翼无彩全番| 538视频在线观看| 欧美精品一区二区三区在线| 十七岁在线观看资源网| 精品久久久久国产免费| 日韩三级在线电影| 黄色三级三级免费看| 三级毛片在线看| 亚洲国产三级在线观看| chinese真实露脸hotmilf| 推拿电影完整未删减版资源| 免费91麻豆精品国产自产在线观看| 日本理论午夜中文字幕| 性爱宝典| 8x视频在线观看| 厨房娇妻被朋友跨下挺进在线观看| 羞羞漫画小舞被黄漫免费| 一级美国乱色毛片| 妞干网视频| 健身私教干了好几次| 日本h片无遮挡在线观看| 久久精品国产一区二区三区 | 免费体验120秒视频| 午夜一区二区在线观看| 在线播放a1|