久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質的職業(yè)教育機構

        手機站
        千鋒教育

        千鋒學習站 | 隨時隨地免費學

        千鋒教育

        掃一掃進入千鋒手機站

        領取全套視頻
        千鋒教育

        關注千鋒學習站小程序
        隨時隨地免費學習課程

        當前位置:首頁  >  技術干貨  > 在以角度加載頁面之前加載數據的簡單方法

        在以角度加載頁面之前加載數據的簡單方法

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

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

        1

          定義

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

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

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

          以下是可以在初始化函數中加載的內容的幾個示例:

          翻譯

          經過身份驗證的用戶數據

          配置數據

          

          為簡單起見,讓我們以加載當前經過身份驗證的用戶的數據為例。

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

        2

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

        3

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

          奠定基礎

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

        4

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

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

          首先,我們注入我們的用戶服務:

        5

          然后對于網頁:

        6

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

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

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

        7

          我們將定義負責獲取 內部數據的函數,如下所示:UserService

        8

          不要忘記導入 中的 .HttpClientModuleAppModule

          實現(xiàn)APP_INITIALIZER

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

        9

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

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

        10

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

          需要考慮的事項

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

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

        11

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

        12

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

        13

        tags:
        聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
        10年以上業(yè)內強師集結,手把手帶你蛻變精英
        請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
        免費領取
        今日已有369人領取成功
        劉同學 138****2860 剛剛成功領取
        王同學 131****2015 剛剛成功領取
        張同學 133****4652 剛剛成功領取
        李同學 135****8607 剛剛成功領取
        楊同學 132****5667 剛剛成功領取
        岳同學 134****6652 剛剛成功領取
        梁同學 157****2950 剛剛成功領取
        劉同學 189****1015 剛剛成功領取
        張同學 155****4678 剛剛成功領取
        鄒同學 139****2907 剛剛成功領取
        董同學 138****2867 剛剛成功領取
        周同學 136****3602 剛剛成功領取
        相關推薦HOT
        庆阳市| 敖汉旗| 汉中市| 武隆县| 炎陵县| 成安县| 五莲县| 泸定县| 丹巴县| 高阳县| 内丘县| 曲松县| 山丹县| 新绛县| 南雄市| 绥德县| 黔西| 区。| 沁水县| 宜都市| 呈贡县| 克拉玛依市| 中方县| 东明县| 乐陵市| 盖州市| 历史| 永福县| 浮梁县| 来凤县| 蓝山县| 和田县| 嘉善县| 龙山县| 佛山市| 霍城县| 都昌县| 泊头市| 九龙坡区| 田林县| 理塘县|