国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
鑰匙要點
>水療中心是一個Web應用程序,可提供類似於桌面應用程序的用戶體驗。在水療中心,所有與後端的通信都發(fā)生在幕後。
什麼是角路由器?
>將路由配置導入我們的應用程序
由於批準模塊在其出口屬性中列出了路由模塊,因此當我們導入批準模塊時,Angular將自動導入RoutingModule,因此我們不必再次明確導入Routermodule(儘管這樣做不會造成任何損害)。
解決戒酒

如何處理404誤差或錯誤的URL?

" >>角路由器在Web開發(fā)中的重要性是什麼? >角路由器:組件路由的簡介

如何處理404誤差或錯誤的URL?

>

>如何使用Angular路由器保護應用程序中的某些路線?路線護罩是可以告訴路由器的接口,是否應允許導航到請求的路線。它們可用於根據(jù)用戶身份驗證,基於角色的訪問控製或任何其他自定義標準來控制訪問。

我可以用Angular Router懶負載模塊嗎?
我如何在Angular路由器中調試路由問題?
Angular Router提供了一個稱為路由器事件的功能,可用於登錄和調試路由行為。這些事件包括導航啟動,導航端,路線識別以及許多其他事件。通過訂閱這些事件,您可以獲取有關路由過程的詳細信息。
>如何在Angular路由器中進行動畫路由過渡?這可用於在應用程序的不同狀態(tài)之間創(chuàng)建視覺上吸引人的過渡,增強用戶體驗。
首頁 web前端 js教程 角路由器:組件路由的簡介

角路由器:組件路由的簡介

Feb 15, 2025 pm 12:20 PM

角路由器:組件路由的簡介

這是SitePoint Angular 2教程的第4部分,介紹瞭如何使用Angular CLI創(chuàng)建CRUD應用程序。在本文中,我們將介紹Angular路由器,並了解當瀏覽器URL更改時如何更新我們的應用程序,反之亦然。我們還將學習如何使用路由器更新我們的應用程序以從後端API解決數(shù)據(jù)。

在第一部分中,我們學會瞭如何將待辦器應用程序啟動,運行並部署到github頁面。這效果很好,但是不幸的是,整個應用都被擠入了一個組件。 在第二部分中,我們檢查了一個更模塊化的組件體系結構,並學習瞭如何將這個單個組件分解為一個較小的組件的結構化樹,這些成分易於理解,重複使用和維護。 在第三部分中,我們更新了應用程序,以使用RXJ和Angular的HTTP服務與REST API後端進行通信。

第0部分 - 終極角度CLI參考指南

第1部分 - 獲取我們的第一個todo應用程序啟動和運行

    第2部分 - 創(chuàng)建單獨的組件以顯示戒酒列表和單個todo
  1. >
  2. >第3部分 - 更新托多服務以與REST API
  3. 通信
  4. 第4部分 - 使用Angular路由器解決數(shù)據(jù)
  5. 第5部分 - 添加身份驗證以保護私人內容
  6. 第6部分 - 如何將Angular項目更新為最新版本。
  7. >
  8. 不用擔心!您不需要遵循本教程的第一部分,兩個或三個,就可以使四個教程有意義。您只需獲取我們的存儲庫的副本,從第三部分查看代碼,然後將其作為起點。這將在下面更詳細地進行說明。
  9. 鑰匙要點

    通過管理不同應用程序狀態(tài)之間的狀態(tài)過渡和導航路徑,Angular Router可以啟用單頁應用程序(SPA)的創(chuàng)建。
  • 路由器處理瀏覽器URL更改並更新應用程序狀態(tài),從而使應用程序可以動態(tài)地對URL更改做出反應,而無需重新加載頁面。
  • > Angular路由器支持Lazy Loading,它通過按需加載模塊而不是在啟動時改善初始負載性能。
  • Angular路由器中的路線護罩通過根據(jù)用戶身份驗證或其他條件來控制訪問來幫助保護某些路線,以確保只有授權用戶才能訪問應用程序的特定部分。
  • 路由器可以使用通配符路由來處理404個錯誤或不正確的URL,該路由將用戶重定向到指定的“未找到”頁面或其他後備頁面時,當沒有路由與URL匹配時。 >向上並運行
  • >確保已安裝了最新版本的Angular CLI。如果不這樣
  • 如果您需要刪除Angular CLI的先前版本,則可以執(zhí)行此操作:>
  • 之後,您需要第三部分中的代碼副本。這可以在Github上找到。本系列中的每個文章在存儲庫中都有一個相應的標籤,因此您可以在應用程序的不同狀態(tài)之間來回切換。
  • 我們在第三部分中以本文開始的代碼被標記為第3部分。我們結束本文的代碼被標記為第4部分。
  • >
>您可以將標籤視為特定提交ID的別名。您可以使用Git Checkout在它們之間切換。您可以在此處閱讀更多信息。

>因此,要啟動並運行(已安裝了Angular CLI的最新版本),我們將執(zhí)行此操作:

>
<span>npm install -g @angular/cli@latest
</span>

然後訪問http:// localhost:4200/。如果一切順利,您應該看到工作的todo應用程序。

npm uninstall -g @angular/cli angular-cli
npm cache clean
<span>npm install -g @angular/cli@latest
</span>
快速回顧

這是我們的應用程序體系結構在第3部分的末尾的樣子:>

在本文中,我們將:

  • 了解為什麼應用程序可能需要路由
  • 了解JavaScript路由器是什麼
  • 了解什麼是角路由器,它的工作方式以及它可以為您做什麼
  • >設置Angular路由器並配置我們的應用程序
  • >的路由
  • 創(chuàng)建一個從我們的REST API
  • 中獲取戒酒的解析器
  • >更新我們的應用程序以使用我們的新解析器獲取招待。
  • 在本文結尾處,您將了解:

>何時以及為什麼您的應用程序可能需要路由
  • 服務器上的路由與瀏覽器中的路由之間的區(qū)別
  • 什麼是角路由器,它可以為您的應用程序做什麼
  • 如何設置Angular Router
  • 如何為應用程序配置路由
  • >如何告訴角路由器在dom
  • >中將組件放置在哪裡
  • 如何優(yōu)雅地處理未知URL
  • 什麼是解析器,它可以用於
  • >
  • >如何使用Angular路由器來解決數(shù)據(jù)。
  • 所以,讓我們開始吧!
  • >
  • 為什麼要路由?
在當前狀態(tài)下,我們的Web應用程序不考慮瀏覽器URL。

>我們通過一個URL訪問我們的應用程序,例如http:// localhost:4200,我們的應用程序不知道任何其他URL,例如http:// localhost:4200/todos。

>大多數(shù)Web應用程序都需要支持不同的URL,以將用戶導航到應用程序中的不同頁面。那是路由器進來的地方。

在傳統(tǒng)網(wǎng)站中,路由由服務器上的路由器處理:>

一個用戶單擊瀏覽器中的鏈接,導致URL更改

>

瀏覽器將HTTP請求發(fā)送到服務器

服務器從HTTP請求讀取URL並生成適當?shù)腍TTP響應

服務器將http響應發(fā)送到瀏覽器。
    >
  1. 在現(xiàn)代JavaScript Web應用程序中,路由通常由瀏覽器中的JavaScript路由器處理。
  2. 什麼是JavaScript路由器?
  3. 本質上,JavaScript路由器做了兩件事:>
  4. >當瀏覽器URL更改
  5. 時更新Web應用程序狀態(tài)
  6. >在Web應用程序狀態(tài)更改時更新瀏覽器URL。

> JavaScript路由器使我們有可能開發(fā)單頁應用程序(SPA)。

>水療中心是一個Web應用程序,可提供類似於桌面應用程序的用戶體驗。在水療中心,所有與後端的通信都發(fā)生在幕後。

>

>用戶從一個頁面導航到另一頁時,即使URL更改,該頁面也會動態(tài)更新,而無需重新加載。

。
    有許多不同的JavaScript路由器實現(xiàn)。
  1. >
  2. >其中一些是專門為某個JavaScript框架編寫的,例如Angular,Ember,React,Vue.js和Aurelia等。其他實現(xiàn)是出於通用目的而構建的,並且與特定的框架沒有綁定。
  3. >。

    什麼是角路由器?

    > >這是一個JavaScript路由器的實現(xiàn),旨在與Angular一起使用,並包裝為 @angular/Router。

    首先,Angular Router負責JavaScript路由器的職責:

    >當用戶導航到某個URL
    • 它使用戶可以從一個頁面導航到另一頁,而無需頁面重新加載
    • 它更新了瀏覽器的歷史記錄,以便用戶可以在頁面之間來回導航時使用
    • forward> forward> forward> forward>。 此外,Angular Router允許我們: >將URL重定向到另一個URL
    • 在顯示頁面之前,請分析數(shù)據(jù)

    在激活或停用頁面時運行腳本

    lazy load Load我們應用程序的部分。
      >
    • 在本文中,我們將學習如何設置和配置Angular路由器,如何重定向URL以及如何使用Angular Router從我們的後端API中解析Todos。 在下一篇文章中,我們將在應用程序中添加身份驗證,並使用路由器來確保只有在用戶登錄時才能訪問某些頁面。 >
    • >
    • 角路由器的工作方式
    • >在我們深入了解代碼之前,重要的是要了解角路由器的運行方式及其介紹的術語。
    • 用戶導航到頁面時,Angular Router按順序執(zhí)行以下步驟:
    >它讀取用戶想要導航到

    >的瀏覽器URL

    它應用URL重定向(如果定義了)

    >

    它可以弄清哪個路由器狀態(tài)對應於url

    >

    >它運行在路由器狀態(tài)下定義的警衛(wèi)

    >它可以解決路由器狀態(tài)

    的所需數(shù)據(jù)

    它激活角組件以顯示頁面
    1. >當請求新頁面時,它管理導航並重複上述步驟。
    2. >
    3. 為了完成其任務,Angular Router介紹了以下術語和概念:
    • >路由器服務:我們應用程序中的全球角路由器服務
    • 路由器配置:所有可能的路由器狀態(tài)的定義我們的應用程序可以在
    • 路由器狀態(tài):路由器的狀態(tài)在某個時間點,以激活路線快照為單位的樹
    • 激活的路由快照:提供對路由器狀態(tài)節(jié)點>的URL,參數(shù)和數(shù)據(jù)的訪問權限
    • 守衛(wèi):在加載,激活或停用路線時運行的腳本
    • >
    • >解析器:在激活請求頁面之前獲取數(shù)據(jù)的腳本
    • >
    • >路由器出口:位於Angular路由器可以放置激活組件的DOM中的位置。
    • 不用擔心術語是否聽起來很強烈。當我們在本系列中逐漸解決這些術語時,您會習慣這些術語,並且隨著您在Angular Router中獲得更多的經(jīng)驗。
    • >使用Angular Router的Angular應用程序僅具有一個路由器服務實例:它是單身人士。無論何時何地將路由器服務注入應用程序中,您都可以訪問相同的Angular Router Service實例。
    >更深入地查看角路由過程,請確保查看Angular Router導航的7步路由過程。

    啟用路由

    要在我們的角度應用中啟用路由,我們需要做三件事:>

    創(chuàng)建一個路由配置,該配置為我們的應用程序定義了可能的狀態(tài)

    >將路由配置導入我們的應用程序

    添加一個路由器插座,以告訴角路由器將激活的組件放在dom。

      >讓我們從創(chuàng)建路由配置開始。 >
    1. 創(chuàng)建路由配置
    2. 為了創(chuàng)建我們的路由配置,我們需要我們希望我們的應用程序的URL列表來支持。
    3. 當前,我們的應用程序非常簡單,只有一個頁面顯示todos的列表:>
    /:顯示todos

    的列表

    將顯示Todos的列表作為我們應用程序的主頁。 > 但是,當用戶書籤/瀏覽器中的用戶書籤/諮詢他們的毒品列表時,我們更改了主頁的內容(我們將在本系列的第5部分中進行),他們的書籤將不再顯示其列表todos 。

    >所以讓我們列出我們的待辦事項清單自己的URL,然後將我們的主頁重定向到其中:>

    /:重定向到 /todos

      /todos:顯示todos的列表。
    這為我們帶來了兩個好處:

    • >用戶在Todos頁面上添加書籤時,他們的瀏覽器將添加書籤 /todos而不是 /,即使我們更改主頁contents
    • >現(xiàn)在,我們可以通過將其重定向到我們喜歡的任何URL來輕鬆更改我們的主頁,如果您需要定期更改主頁內容,這很方便。
    • >

    官方Angular樣式指南建議將Angular模塊的路由配置存儲在文件中,並在-routing.module.ts中輸出文件名,該文件名導出一個單獨的Angular模塊,並在routingModule中結束名稱。

    我們的當前模塊稱為AppModule,因此我們創(chuàng)建一個文件src/app/app-routing.module.ts,並將路由配置導出為稱為apploutingModule的角度模塊:

    <span>npm install -g @angular/cli@latest
    </span>
    首先,我們從 @angular/Router導入Routermodule和路由:

    接下來,我們定義一個類型路由的可變路由並分配我們的路由器配置:
    npm uninstall -g @angular/cli angular-cli
    npm cache clean
    <span>npm install -g @angular/cli@latest
    </span>

    >
    <span>git clone git@github.com:sitepoint-editors/angular-todo-app.git
    </span><span>cd angular-todo-app
    </span><span>git checkout part-3
    </span><span>npm install
    </span>ng serve
    
    路由類型是可選的,可以讓IDEScript支持或打字稿編譯器在開發(fā)過程中方便地驗證您的路線配置。

    >

    路由器配置表示我們的應用程序中所有可能的路由器狀態(tài)。

    它是一棵路由樹,定義為JavaScript數(shù)組,每個路線都可以具有以下屬性:>

    路徑:字符串,匹配URL

    的路徑
      pathmatch:字符串,如何匹配URL
    • 組件:類參考,激活此路由時激活的組件
    • >
    • redirectto:字符串,將URL重定向到激活此路由
    • >
    • 數(shù)據(jù):分配到路由的靜態(tài)數(shù)據(jù)
    • 解決:解析時要解決並合併數(shù)據(jù)的動態(tài)數(shù)據(jù)
    • >
    • 兒童:兒童路線。
    • 我們的應用程序很簡單,僅包含兩個同級路由,但是較大的應用程序可以使用兒童路由的路由器配置,例如:

    >在這裡,Todos有兩個子路由,ID是一個路由參數(shù),使路由器能夠識別以下URL:

    <span>import { NgModule } from '@angular/core';
    </span><span>import { RouterModule, Routes } from '@angular/router';
    </span><span>import { AppComponent } from './app.component';
    </span>
    <span>const routes: Routes = [
    </span>  <span>{
    </span>    path<span>: '',
    </span>    redirectTo<span>: 'todos',
    </span>    pathMatch<span>: 'full'
    </span>  <span>},
    </span>  <span>{
    </span>    path<span>: 'todos',
    </span>    component<span>: AppComponent
    </span>  <span>}
    </span><span>];
    </span>
    <span><span>@NgModule</span>({
    </span>  imports<span>: [RouterModule.forRoot(routes)],
    </span>  exports<span>: [RouterModule],
    </span>  providers<span>: []
    </span><span>})
    </span><span>export class AppRoutingModule {
    </span><span>}
    </span>

    /:主頁,重定向到 /todos

      /todos:激活TodospageComponent並顯示todos
    • 的列表
    • /todos/1:激活todopageComponent和設置值:ID參數(shù)為1
    • >
    • /todos/2:激活todopageComponent和設置值:id參數(shù)為2
    • 請注意我們如何指定路徑:定義重定向時'Full'。

    >前綴:默認值,匹配url時,從路徑的值開始

    完整:匹配URL等於路徑的值時匹配。 >

    我們可以創(chuàng)建以下途徑:
      >
    • 在這種情況下,Angular Router應用默認的前綴路徑匹配策略,並且每個URL都會重定向到Todos,因為每個URL均以路徑中指定的空字符串開頭。

      >我們只希望將主頁重定向到Todos,因此我們添加路徑:'Full'以確保僅匹配的URL'

    <span>npm install -g @angular/cli@latest
    </span>
    >要了解有關不同路由配置選項的更多信息,請查看有關路由和導航的官方角文檔。

    > 最後,我們創(chuàng)建和導出一個角模塊批準模塊:

    有兩種創(chuàng)建路由模塊的方法:

    npm uninstall -g @angular/cli angular-cli
    npm cache clean
    <span>npm install -g @angular/cli@latest
    </span>

    routermot.forroot(路由):創(chuàng)建一個包括路由器指令,路由配置和路由器服務

    >的路由模塊
      routermodule.forchild(路由):創(chuàng)建一個包括路由器指令,路由配置而不是路由器服務的路由模塊。 >
    1. 當您的應用程序具有多個路由模塊時,需要
    2. Routermodule.forchild()方法。
    3. 請記住,路由器服務會照顧我們的應用狀態(tài)和瀏覽器URL之間的同步。實例化與同一瀏覽器URL交互的多個路由器服務將導致問題,因此,無論我們在應用程序中導入多少路由模塊,我們的應用程序中只有一個實例的路由器服務實例。
    >

    >當我們導入使用Routermot.forroot()創(chuàng)建的路由模塊時,Angular將實例化路由器服務。當我們導入使用routermodule.forchild()創(chuàng)建的路由模塊時,Angular將不會實例化路由器服務。

    >

    因此,我們只能使用routermot.forroot()一次,然後多次使用routermot.forchild.forchild.forchild()進行其他路由模塊。

    >

    由於我們的應用程序只有一個路由模塊,因此我們使用routermotule.forroot():

    >

    此外,我們還指定了導出屬性中的routermodule:>

    這可以確保我們不必在AppModule imports ApploutingModule時再次在AppModule中明確導入Routermodule。
    <span>git clone git@github.com:sitepoint-editors/angular-todo-app.git
    </span><span>cd angular-todo-app
    </span><span>git checkout part-3
    </span><span>npm install
    </span>ng serve
    
    >現(xiàn)在我們有了批準模塊,我們需要在AppModule中導入它才能啟用它。

    導入路由配置
    <span>import { NgModule } from '@angular/core';
    </span><span>import { RouterModule, Routes } from '@angular/router';
    </span><span>import { AppComponent } from './app.component';
    </span>
    <span>const routes: Routes = [
    </span>  <span>{
    </span>    path<span>: '',
    </span>    redirectTo<span>: 'todos',
    </span>    pathMatch<span>: 'full'
    </span>  <span>},
    </span>  <span>{
    </span>    path<span>: 'todos',
    </span>    component<span>: AppComponent
    </span>  <span>}
    </span><span>];
    </span>
    <span><span>@NgModule</span>({
    </span>  imports<span>: [RouterModule.forRoot(routes)],
    </span>  exports<span>: [RouterModule],
    </span>  providers<span>: []
    </span><span>})
    </span><span>export class AppRoutingModule {
    </span><span>}
    </span>

    >要將我們的路由配置導入應用程序,我們必須將批準模塊導入我們的主要AppModule。

    >讓我們打開src/app/app.module.ts,然後將ApploutingModule添加到AppModule的@ngmodule metadata中的導入陣列:

    >

    由於批準模塊在其出口屬性中列出了路由模塊,因此當我們導入批準模塊時,Angular將自動導入RoutingModule,因此我們不必再次明確導入Routermodule(儘管這樣做不會造成任何損害)。

    )。

    )。

    )。

    >在我們可以在瀏覽器中嘗試更改之前,我們需要完成第三步也是最後一步。

    添加路由器插座
    <span>import { RouterModule, Routes } from '@angular/router';
    </span>

    儘管我們的應用程序現(xiàn)在具有路由配置,但我們仍然需要告訴Angular Router,它可以將實例化組件放置在DOM中。當我們的應用程序被引導時,Angular會啟用AppComponent時,因為AppComponent在AppModule的Bootstrap屬性中列出

    告訴角路由器可以放置組件的位置,我們必須將 元素添加到AppComponent的HTML模板中。
    <span>npm install -g @angular/cli@latest
    </span>
    元素告訴角路由器在何處可以在dom中實例化組件。

    >如果您熟悉AngularJS 1.x路由器和UI-Router,則可以考慮 ng-view和ui-view的角度替代品。

    沒有 元素,Angular Router不知道將組件放置在哪裡,並且只有AppComponent自己的HTML才會渲染。 > > appComponent當前顯示todos的列表。

    >

    但我們現(xiàn)在希望AppComponent包含AppComponent,而不是讓AppComponent顯示todos的列表,而是包含 ,並告訴Angular Router以實例化AppComponent中的另一個組件以顯示Todos列表。 ??> 為了實現(xiàn)這一目標,讓我們使用Angular CLI生成一個新的組件todoscomponent:

    >我們還將所有HTML從src/app/app.component.html移動到src/app/todos/todos/todos.component.html:

    >我們還將所有邏輯從src/app/app.component.ts移動到src/app/todos/todos/todos.component.ts:

    現(xiàn)在,我們可以在src/app/app.component.html中替換appcomponent的模板:
    npm uninstall -g @angular/cli angular-cli
    npm cache clean
    <span>npm install -g @angular/cli@latest
    </span>

    >我們還可以從src/app/app.component.ts中的AppComponent類中刪除所有已過時的代碼:
    <span>git clone git@github.com:sitepoint-editors/angular-todo-app.git
    </span><span>cd angular-todo-app
    </span><span>git checkout part-3
    </span><span>npm install
    </span>ng serve
    

    最後,我們在src/app/app-routing.module.ts中更新我們的todos路由,以實例化todoscomponent,而不是appcomponent:
    <span>import { NgModule } from '@angular/core';
    </span><span>import { RouterModule, Routes } from '@angular/router';
    </span><span>import { AppComponent } from './app.component';
    </span>
    <span>const routes: Routes = [
    </span>  <span>{
    </span>    path<span>: '',
    </span>    redirectTo<span>: 'todos',
    </span>    pathMatch<span>: 'full'
    </span>  <span>},
    </span>  <span>{
    </span>    path<span>: 'todos',
    </span>    component<span>: AppComponent
    </span>  <span>}
    </span><span>];
    </span>
    <span><span>@NgModule</span>({
    </span>  imports<span>: [RouterModule.forRoot(routes)],
    </span>  exports<span>: [RouterModule],
    </span>  providers<span>: []
    </span><span>})
    </span><span>export class AppRoutingModule {
    </span><span>}
    </span>

    現(xiàn)在,當我們的應用程序被引導時,Angular啟用了AppComponent並找到 Angular Router可以實例化和激活組件。
    <span>import { RouterModule, Routes } from '@angular/router';
    </span>
    >。

    >讓我們在瀏覽器中嘗試更改。

    >
    <span>const routes: Routes = [
    </span>  <span>{
    </span>    path<span>: '',
    </span>    redirectTo<span>: 'todos',
    </span>    pathMatch<span>: 'full'
    </span>  <span>},
    </span>  <span>{
    </span>    path<span>: 'todos',
    </span>    component<span>: AppComponent
    </span>  <span>}
    </span><span>];
    </span>
    >通過運行:

    啟動開發(fā)服務器和後端API

    <span>const routes: Routes = [
    </span>  <span>{
    </span>    path<span>: '',
    </span>    redirectTo<span>: 'todos',
    </span>    pathMatch<span>: 'full'
    </span>  <span>},
    </span>  <span>{
    </span>    path<span>: 'todos',
    </span>    children<span>: [
    </span>      <span>{
    </span>        path<span>: '',
    </span>        component<span>: 'TodosPageComponent'
    </span>      <span>},
    </span>      <span>{
    </span>        path<span>: ':id',
    </span>        component<span>: 'TodoPageComponent'
    </span>      <span>}
    </span>    <span>]
    </span>  <span>}
    </span><span>];
    </span>
    然後將瀏覽器導航到http:// localhost:4200。

    > Angular路由器讀取路由器配置,並自動將我們的瀏覽器重定向到http:// localhost:4200/todos。

    如果您檢查頁面上的元素,您會看到todosComponent在 中沒有渲染,而是在其旁邊:>

    我們的應用程序現(xiàn)在已啟用路由。太棒了!

    <span>// no pathMatch specified, so Angular Router applies
    </span><span>// the default `prefix` pathMatch
    </span><span>{
    </span>  path<span>: '',
    </span>  redirectTo<span>: 'todos'
    </span><span>}
    </span>
    添加通配符路線

    >當您將瀏覽器導航到http:// localhost:4200/tormatched-url,並且您打開瀏覽器的開發(fā)人員工具時,您會注意到,Angular Router將以下錯誤記錄到控制臺:

    >

    才能優(yōu)雅地處理無與倫比的URL,我們需要做兩件事:>

    1. > Create PagenotFoundComponent(如果願意,您可以以不同的方式命名),以顯示一條友好的消息,該消息無法找到所請求的頁面。
    2. 告訴Angular Router在沒有路由匹配所請求的URL時顯示PagenotFoundComponent。
    3. 讓我們從使用Angular CLI生成PagenotFoundComponent首先

    然後在src/app/page-not-not/page-not-found.component.html中編輯其模板:

    <span>npm install -g @angular/cli@latest
    </span>

    接下來,我們使用**作為路徑添加通配符路線:>

    **> **匹配任何URL,包括兒童路徑。
    npm uninstall -g @angular/cli angular-cli
    npm cache clean
    <span>npm install -g @angular/cli@latest
    </span>

    現(xiàn)在,如果您將瀏覽器導航到http:// localhost:4200/tormatched-url,則顯示PagenotfoundComponent。

    請注意,通配符路由必須是我們路由配置中的最後一條路線,才能按預期工作。
    <span>git clone git@github.com:sitepoint-editors/angular-todo-app.git
    </span><span>cd angular-todo-app
    </span><span>git checkout part-3
    </span><span>npm install
    </span>ng serve
    
    當Angular路由器匹配請求URL與路由器配置匹配時,它在找到第一個匹配時就會停止處理。

    ,如果我們要將路線的順序更改為此:>

    將永遠無法達到戒酒,並且將顯示pagenotfoundcomponent,因為通配符路線將首先匹配。

    >。

    我們已經(jīng)做了很多事情,所以讓我們快速回顧到目前為止取得的成就:>

    我們設置了Angular Router

    <span>import { NgModule } from '@angular/core';
    </span><span>import { RouterModule, Routes } from '@angular/router';
    </span><span>import { AppComponent } from './app.component';
    </span>
    <span>const routes: Routes = [
    </span>  <span>{
    </span>    path<span>: '',
    </span>    redirectTo<span>: 'todos',
    </span>    pathMatch<span>: 'full'
    </span>  <span>},
    </span>  <span>{
    </span>    path<span>: 'todos',
    </span>    component<span>: AppComponent
    </span>  <span>}
    </span><span>];
    </span>
    <span><span>@NgModule</span>({
    </span>  imports<span>: [RouterModule.forRoot(routes)],
    </span>  exports<span>: [RouterModule],
    </span>  providers<span>: []
    </span><span>})
    </span><span>export class AppRoutingModule {
    </span><span>}
    </span>
    我們?yōu)閼贸绦騽?chuàng)建了路由配置

    我們將AppComponent重構為ToDosComponent 我們添加了 在AppComponent的模板

      我們添加了一條通配符路線,以優(yōu)雅地處理無與倫比的URL。
    • 接下來,我們將使用Angular Router創(chuàng)建一個從後端API獲取現(xiàn)有的Todos的解析器。
    • 使用Angular Router
    • 解決數(shù)據(jù)
    • 在本系列的第3部分中,我們已經(jīng)學習瞭如何使用Angular HTTP服務從後端API獲取數(shù)據(jù)。
    • 當前,當我們將瀏覽器導航到Todos URL時,發(fā)生以下情況:>
    • 匹配
    todosComponent在瀏覽器中顯示了帶有todos

    的空數(shù)組

    在thetodoscomponent的ngoninit處理程序的API中獲取戒酒

    >

    在瀏覽器中更新了TodoScomponent,從API獲取Todos。

    如果在步驟5中加載Todos需要三秒鐘,則將在步驟6中顯示實際的Todos之前,在三秒鐘內顯示用戶三秒鐘的空白列表。

    如果todoScomponent在其模板中具有以下HTML:

      然後,在顯示實際的Todos之前,用戶將看到此消息三秒鐘,這可能完全誤導用戶並導致用戶在實際數(shù)據(jù)進來之前導航。

      >我們可以將加載程序添加到todosComponent,該加載程序在加載數(shù)據(jù)時顯示旋轉器,但有時我們可能無法控制實際組件,例如,當我們使用第三方組件時。

      要解決這種不必要的行為,我們需要以下以下事情:

      >

      匹配 >
    1. todosComponent顯示在瀏覽器中,從API獲取todos。
    2. >在這裡,直到我們的API後端數(shù)據(jù)可用之前,才顯示todosComponent。
    3. 這正是解析器可以為我們做的。
    4. >
    5. >讓角路由器在激活todosComponent之前就可以解決戒毒者,我們必須做兩件事:
    創(chuàng)建一個todosresolver,從api

    中獲取招待

    >告訴Angular路由器在激活Todos Coute中的TodoScomponent時,使用TodoSresolver來獲取毒品。

    >

    >通過將解析器連接到Todos路線,我們要求Angular路由器首先解析數(shù)據(jù),然後再激活TodoScomponent。

    因此,讓我們創(chuàng)建一個解析器來獲取我們的戒酒。 >
      創(chuàng)建todosresolver
    1. Angular CLI沒有生成解析器的命令,因此,讓我們手動創(chuàng)建一個新的文件src/todos.resolver.ts,並添加以下代碼:>
    2. 我們將解析器定義為實現(xiàn)Resolve接口的類
    >

    解決方案接口是可選的,但是讓我們的打字稿IDE或編譯器確保我們通過要求我們實現(xiàn)resolve()方法來正確實現(xiàn)類。

    > 當角路由器需要使用解析器解析數(shù)據(jù)時,它將調用解析器的resolve()方法,並期望resolve()方法返回值,承諾或可觀察的。

    >如果resolve()方法返回承諾或可觀察的角路由器將等待承諾或可觀察到的諾言,或者在激活路線的組件之前完成。

    調用Resolve()方法時,Angular Router便利地通過激活的路由快照和路由器狀態(tài)快照,以為我們提供對數(shù)據(jù)的訪問(例如路由參數(shù)或查詢參數(shù)),我們可能需要解決數(shù)據(jù)。 ??>

    TodoSresolver的代碼非常簡潔,因為我們已經(jīng)有一個與API後端進行所有通信的TodoDataservice。

    我們在構造函數(shù)中註入tododataservice,並使用其getalltodos()方法在resolve()方法中獲取所有todos。
    <span>npm install -g @angular/cli@latest
    </span>
    解決方法返回可觀察到的todo []的可觀察的方法,因此Angular路由器將在激活路線組件之前等待可觀察到的可觀察到的。

    >現(xiàn)在我們有了解決方案,讓我們配置Angular路由器以使用它。 通過路由器

    解決戒酒

    要使角路由器使用解析器,我們必須將其連接到路線配置中的路由。

    >讓我們打開src/app-routing.module.ts,然後將我們的todosresolver添加到Todos路線:

    <span>npm install -g @angular/cli@latest
    </span>
    我們導入todosresolver:

    也將其添加為解析器Todos路線:
    npm uninstall -g @angular/cli angular-cli
    npm cache clean
    <span>npm install -g @angular/cli@latest
    </span>

    這告訴Angular路由器使用TodoSresolver解析數(shù)據(jù),並將解析器的返回值分配為路由數(shù)據(jù)中的Todos。

    >可以從ActivatedRoute或ActivatedRoutesNapshot訪問路由的數(shù)據(jù),我們將在下一節(jié)中看到。
    <span>git clone git@github.com:sitepoint-editors/angular-todo-app.git
    </span><span>cd angular-todo-app
    </span><span>git checkout part-3
    </span><span>npm install
    </span>ng serve
    
    >您可以使用路由的數(shù)據(jù)屬性直接將靜態(tài)數(shù)據(jù)添加到路由數(shù)據(jù):>

    >您還可以使用路由的解析屬性中指定的解析器添加動態(tài)數(shù)據(jù):>

    >您也可以同時完成這兩個:

    <span>import { NgModule } from '@angular/core';
    </span><span>import { RouterModule, Routes } from '@angular/router';
    </span><span>import { AppComponent } from './app.component';
    </span>
    <span>const routes: Routes = [
    </span>  <span>{
    </span>    path<span>: '',
    </span>    redirectTo<span>: 'todos',
    </span>    pathMatch<span>: 'full'
    </span>  <span>},
    </span>  <span>{
    </span>    path<span>: 'todos',
    </span>    component<span>: AppComponent
    </span>  <span>}
    </span><span>];
    </span>
    <span><span>@NgModule</span>({
    </span>  imports<span>: [RouterModule.forRoot(routes)],
    </span>  exports<span>: [RouterModule],
    </span>  providers<span>: []
    </span><span>})
    </span><span>export class AppRoutingModule {
    </span><span>}
    </span>
    >一旦解決了分解屬性的解析器,它們的值就與數(shù)據(jù)屬性中的靜態(tài)數(shù)據(jù)合併,並將所有數(shù)據(jù)作為路線的數(shù)據(jù)提供。

    >角路由器使用角度依賴注入來訪問解析器,因此我們必須通過將其添加到AcressutingModule的@ngmodule Metadata中:

    >
    <span>import { RouterModule, Routes } from '@angular/router';
    </span>
    >,確保將其添加到Angular的依賴注入系統(tǒng)中:

    >當您導航瀏覽器到http:// localhost:4200,Angular Router立即:
    <span>const routes: Routes = [
    </span>  <span>{
    </span>    path<span>: '',
    </span>    redirectTo<span>: 'todos',
    </span>    pathMatch<span>: 'full'
    </span>  <span>},
    </span>  <span>{
    </span>    path<span>: 'todos',
    </span>    component<span>: AppComponent
    </span>  <span>}
    </span><span>];
    </span>

    >從 /到 / todos

    重定向URL

    看到Todos路線在其Resolve屬性中定義了TodoSresolver
    <span>const routes: Routes = [
    </span>  <span>{
    </span>    path<span>: '',
    </span>    redirectTo<span>: 'todos',
    </span>    pathMatch<span>: 'full'
    </span>  <span>},
    </span>  <span>{
    </span>    path<span>: 'todos',
    </span>    children<span>: [
    </span>      <span>{
    </span>        path<span>: '',
    </span>        component<span>: 'TodosPageComponent'
    </span>      <span>},
    </span>      <span>{
    </span>        path<span>: ':id',
    </span>        component<span>: 'TodoPageComponent'
    </span>      <span>}
    </span>    <span>]
    </span>  <span>}
    </span><span>];
    </span>
    >從TodoSresolver運行Resolve()方法,等待結果,並將結果分配給路由數(shù)據(jù)中的Todos

    激活todosComponent。

    1. >如果您打開了開發(fā)人員工具的網(wǎng)絡選項卡,您會發(fā)現(xiàn)Todos現(xiàn)在從API中獲取了兩次。一旦通過Angular路由器,一次由TodoScomponent中的ngoninit處理程序。
    2. 使用已解決的數(shù)據(jù)

  4. 讓我們打開App/src/todos/todos.component.ts。
  5. ngoninit()處理程序當前直接從API中獲取Todos:>
現(xiàn)在,Angular Router使用TodoSresolver獲取了Todos,我們想從路由數(shù)據(jù)而不是API中獲取TodoScomponent中的todos。

>要訪問路由數(shù)據(jù),我們必須從 @angular/Router導入ActivatedRoute:

並使用角度依賴注入來獲取激活途徑的手柄:>

>最後,我們更新了ngoninit()處理程序以從路由數(shù)據(jù)而不是API獲取戒菸

我們用this.route.data.map(((data)=> data ['todos'])替換this.tododataservice.getalltodos(),並且所有其餘的代碼都保持不變。

如果您將瀏覽器導航到Localhost:4200並打開網(wǎng)絡選項卡,則您將不再看到兩個HTTP請求從API中獲取Todos。

任務完成了!我們已經(jīng)成功地集成了Angular路由器!

>

在總結之前,讓我們進行單元測試:>

一個單位測試失?。?/p>

<span>npm install -g @angular/cli@latest
</span>

>測試todoScomponent時,測試臺不了解todolistheadercomponent,因此Angular抱怨它不知道App-todo-list-Header元素。

為了解決此錯誤,讓我們打開應用程序/src/todos/todos.component.spec.ts,然後添加no_errors_schema到測試床選項:>
npm uninstall -g @angular/cli angular-cli
npm cache clean
<span>npm install -g @angular/cli@latest
</span>

現(xiàn)在,業(yè)力顯示了另一個錯誤:

>讓我們將必要的提供商添加到測試床選項中:
<span>git clone git@github.com:sitepoint-editors/angular-todo-app.git
</span><span>cd angular-todo-app
</span><span>git checkout part-3
</span><span>npm install
</span>ng serve

這再次引起了另一個錯誤:
<span>import { NgModule } from '@angular/core';
</span><span>import { RouterModule, Routes } from '@angular/router';
</span><span>import { AppComponent } from './app.component';
</span>
<span>const routes: Routes = [
</span>  <span>{
</span>    path<span>: '',
</span>    redirectTo<span>: 'todos',
</span>    pathMatch<span>: 'full'
</span>  <span>},
</span>  <span>{
</span>    path<span>: 'todos',
</span>    component<span>: AppComponent
</span>  <span>}
</span><span>];
</span>
<span><span>@NgModule</span>({
</span>  imports<span>: [RouterModule.forRoot(routes)],
</span>  exports<span>: [RouterModule],
</span>  providers<span>: []
</span><span>})
</span><span>export class AppRoutingModule {
</span><span>}
</span>

>讓我們再添加一個用於ActivatedRoute的提供商到測試臺選項:
<span>import { RouterModule, Routes } from '@angular/router';
</span>

我們?yōu)锳ctivatedRoute分配了一個模擬對象的提供商,該對象包含可觀察的數(shù)據(jù)屬性,以揭示Todos的測試值。

現(xiàn)在,單元測試成功通過:
<span>const routes: Routes = [
</span>  <span>{
</span>    path<span>: '',
</span>    redirectTo<span>: 'todos',
</span>    pathMatch<span>: 'full'
</span>  <span>},
</span>  <span>{
</span>    path<span>: 'todos',
</span>    component<span>: AppComponent
</span>  <span>}
</span><span>];
</span>

神話般!要將我們的應用程序部署到生產環(huán)境中,我們現(xiàn)在可以運行:
<span>const routes: Routes = [
</span>  <span>{
</span>    path<span>: '',
</span>    redirectTo<span>: 'todos',
</span>    pathMatch<span>: 'full'
</span>  <span>},
</span>  <span>{
</span>    path<span>: 'todos',
</span>    children<span>: [
</span>      <span>{
</span>        path<span>: '',
</span>        component<span>: 'TodosPageComponent'
</span>      <span>},
</span>      <span>{
</span>        path<span>: ':id',
</span>        component<span>: 'TodoPageComponent'
</span>      <span>}
</span>    <span>]
</span>  <span>}
</span><span>];
</span>

我們將生成的DIST目錄上傳到我們的託管服務器。那有多甜?

>

我們在本文中介紹了很多,所以讓我們回顧一下我們學到的東西。
<span>// no pathMatch specified, so Angular Router applies
</span><span>// the default `prefix` pathMatch
</span><span>{
</span>  path<span>: '',
</span>  redirectTo<span>: 'todos'
</span><span>}
</span>
摘要

在第一篇文章中,我們學會瞭如何:
<span>{
</span>  path<span>: '',
</span>  redirectTo<span>: 'todos',
</span>  pathMatch<span>: 'full'
</span><span>}
</span>

>使用Angular Cli

初始化我們的TODO應用程序

創(chuàng)建一個todo類來表示單個todos

>創(chuàng)建一個TodoDataservice服務,以創(chuàng)建,更新和刪除todos

使用AppComponent組件顯示用戶界面

    >將我們的應用程序部署到github頁面
  • 在第二篇文章中,我們重構AppComponent將其大部分工作委派給:>
  • todolistComponent顯示todos
  • 的列表
  • a todolistitemComponent顯示一個單todo
  • todolistheadercomponent創(chuàng)建一個新的todo
todolistFooterComponent顯示剩下多少個毒品。

>

    在第三篇文章中,我們學會瞭如何:
  • >
  • 創(chuàng)建模擬REST API後端
  • 將API URL作為環(huán)境變量存儲
  • 創(chuàng)建一個apiservice與REST API
  • 進行通信
  • >更新tododataservice以使用新的apiservice

更新AppComponent以處理異步API調用

    創(chuàng)建一個apimockservice,以避免運行單元測試時真正的http調用。
  • 在第四篇文章中,我們學會了:
    • 為什麼應用程序可能需要路由
    • JavaScript路由器是什麼
    • 什麼是角路由器,它的工作原理以及它可以為您做什麼
    • >如何設置Angular路由器並為我們的應用程序配置路由
    • >如何告訴角路由器在dom
    • >中將組件放置在哪裡
    • 如何優(yōu)雅地處理未知URL
    • >如何使用解析器讓角路由器解析數(shù)據(jù)。
    • 本文中的所有代碼均可在GitHub上獲得。
    • >
    • 在第五部分中,我們將實施身份驗證以防止未經(jīng)授權訪問我們的應用程序。
    >請繼續(xù)關注更多,一如既往,請隨時在評論中留下您的想法和問題!

    推薦課程

    角度和打字稿的在線課程 托德座右銘 專家領導的在線AngularJ,為個人和團隊提供的角度和打字稿培訓課程。結帳時使用優(yōu)惠券代碼“ SitePoint”以獲得25%的折扣。

    經(jīng)常詢問的問題(常見問題解答)關於使用Angular Router的組件路由

    >角路由器在Web開發(fā)中的重要性是什麼? >角路由器:組件路由的簡介

    如何處理404誤差或錯誤的URL?

    Angular Router提供了一種稱為Wildcard路由的功能處理未知或不正確的URL。當路由器遇到與任何預定義路線不匹配的URL時,它可以重定向到“未找到”頁面或任何其他後備頁面。這是通過使用路徑'**'定義路由並將其與所需組件相關聯(lián)的路由來實現(xiàn)的。

    我可以在Angular Router中的路由之間傳遞數(shù)據(jù)嗎?使用稱為路由參數(shù)的功能之間的路由之間的數(shù)據(jù)。路由參數(shù)是可以更改的URL的一部分,組件可以使用其值來動態(tài)顯示內容或確定行為。當您想導航到列表中的項目的詳細信息時,這特別有用。

    >

    >如何使用Angular路由器保護應用程序中的某些路線?路線護罩是可以告訴路由器的接口,是否應允許導航到請求的路線。它們可用於根據(jù)用戶身份驗證,基於角色的訪問控製或任何其他自定義標準來控制訪問。

    >

    > Angular Router如何處理瀏覽器歷史記錄和返回按鈕功能?通過位置服務與瀏覽器的歷史記錄進行交互。它使用HTML5歷史記錄API更改URL而不會引起整頁重新加載。這意味著瀏覽器的背部和前向按鈕將按預期工作,在應用程序狀態(tài)之間導航。

    我可以用Angular Router懶負載模塊嗎?

    是的,是的,Angular路由器支持Lazy Loading。模塊。這意味著您的應用程序的某些模塊可以按需加載,而不是在應用程序的初始負載下加載。這可以顯著提高應用程序的初始負載性能。

    >

    我如何在Angular路由器中調試路由問題?

    Angular Router提供了一個稱為路由器事件的功能,可用於登錄和調試路由行為。這些事件包括導航啟動,導航端,路線識別以及許多其他事件。通過訂閱這些事件,您可以獲取有關路由過程的詳細信息。

    我可以在Angular路由器中使用嵌套路由嗎? 。這使您可以創(chuàng)建更複雜的導航結構,其中某些路線具有與之關聯(lián)的子路由。這對於創(chuàng)建層次導航結構特別有用。

    >如何在Angular路由器中進行動畫路由過渡?這可用於在應用程序的不同狀態(tài)之間創(chuàng)建視覺上吸引人的過渡,增強用戶體驗。

    我可以預緊裝置模塊以在Angular Router中更快導航嗎?特徵稱為預加載模塊的預加載策略。這意味著在應用程序的初始負載之後,可以將某些模塊加載到後臺。這可以大大提高應用程序的導航速度,因為在需要時已經(jīng)加載了這些模塊。

以上是角路由器:組件路由的簡介的詳細內容。更多資訊請關注PHP中文網(wǎng)其他相關文章!

本網(wǎng)站聲明
本文內容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

垃圾收集如何在JavaScript中起作用? 垃圾收集如何在JavaScript中起作用? Jul 04, 2025 am 12:42 AM

JavaScript的垃圾回收機制通過標記-清除算法自動管理內存,以減少內存洩漏風險。引擎從根對像出發(fā)遍歷並標記活躍對象,未被標記的則被視為垃圾並被清除。例如,當對像不再被引用(如將變量設為null),它將在下一輪迴收中被釋放。常見的內存洩漏原因包括:①未清除的定時器或事件監(jiān)聽器;②閉包中對外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。 V8引擎通過分代回收、增量標記、並行/並發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時間。開發(fā)時應避免不必要的全局引用、及時解除對象關聯(lián),以提升性能與穩(wěn)定性。

如何在node.js中提出HTTP請求? 如何在node.js中提出HTTP請求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請求有三種常用方式:使用內置模塊、axios和node-fetch。 1.使用內置的http/https模塊無需依賴,適合基礎場景,但需手動處理數(shù)據(jù)拼接和錯誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請求;2.axios是基於Promise的第三方庫,語法簡潔且功能強大,支持async/await、自動JSON轉換、攔截器等,推薦用於簡化異步請求操作;3.node-fetch提供類似瀏覽器fetch的風格,基於Promise且語法簡單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時復制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助於編寫更穩(wěn)定可靠的代碼。

JavaScript時間對象,某人構建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時間對象,某人構建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本週的JavaScript新聞!本週我們將重點關注:Oracle與Deno的商標糾紛、新的JavaScript時間對象獲得瀏覽器支持、GoogleChrome的更新以及一些強大的開發(fā)者工具。讓我們開始吧! Oracle與Deno的商標之爭Oracle試圖註冊“JavaScript”商標的舉動引發(fā)爭議。 Node.js和Deno的創(chuàng)建者RyanDahl已提交請願書,要求取消該商標,他認為JavaScript是一個開放標準,不應由Oracle

React與Angular vs Vue:哪個JS框架最好? React與Angular vs Vue:哪個JS框架最好? Jul 05, 2025 am 02:24 AM

選哪個JavaScript框架最好?答案是根據(jù)需求選擇最適合的。 1.React靈活自由,適合需要高度定制、團隊有架構能力的中大型項目;2.Angular提供完整解決方案,適合企業(yè)級應用和長期維護的大項目;3.Vue上手簡單,適合中小型項目或快速開發(fā)。此外,是否已有技術棧、團隊規(guī)模、項目生命週期及是否需要SSR也都是選擇框架的重要因素??傊?,沒有絕對最好的框架,適合自己需求的就是最佳選擇。

立即在JavaScript中立即調用功能表達式(IIFE) 立即在JavaScript中立即調用功能表達式(IIFE) Jul 04, 2025 am 02:42 AM

IIFE(ImmediatelyInvokedFunctionExpression)是一種在定義後立即執(zhí)行的函數(shù)表達式,用於變量隔離和避免污染全局作用域。它通過將函數(shù)包裹在括號中使其成為表達式,並緊隨其後的一對括號來調用,如(function(){/code/})();。其核心用途包括:1.避免變量衝突,防止多個腳本間的命名重複;2.創(chuàng)建私有作用域,使函數(shù)內部變量不可見;3.模塊化代碼,便於初始化工作而不暴露過多變量。常見寫法包括帶參數(shù)傳遞的版本和ES6箭頭函數(shù)版本,但需注意:必須使用表達式、結

處理諾言:鏈接,錯誤處理和承諾在JavaScript中 處理諾言:鏈接,錯誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機制,理解鍊式調用、錯誤處理和組合器是掌握其應用的關鍵。 1.鍊式調用通過.then()返回新Promise實現(xiàn)異步流程串聯(lián),每個.then()接收上一步結果並可返回值或Promise;2.錯誤處理應統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,並可在catch中返回默認值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個完成即返回)和Promise.allSettled()(等待所有完成)

什麼是緩存API?如何與服務人員使用? 什麼是緩存API?如何與服務人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡請求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗。 1.它允許開發(fā)者手動存儲如腳本、樣式表、圖片等資源;2.可根據(jù)請求匹配緩存響應;3.支持刪除特定緩存或清空整個緩存;4.通過ServiceWorker監(jiān)聽fetch事件實現(xiàn)緩存優(yōu)先或網(wǎng)絡優(yōu)先等策略;5.常用於離線支持、加快重複訪問速度、預加載關鍵資源及後臺更新內容;6.使用時需注意緩存版本控制、存儲限制及與HTTP緩存機制的區(qū)別。

See all articles