這是路由器頁面的DRAFT,它仍在積極更新。 大部份內容都是準確的,但樣本仍在改進和加強。 歡迎反饋。html
當用戶執行應用程序任務時,Angular路由器支持從一個視圖導航到下一個視圖。java
本指南涵蓋路由器的主要功能,經過演示能夠實時運行的小應用程序(查看源代碼)演示它們。git
瀏覽器是一種熟悉的應用程序導航模型:github
Angular路由器借鑑了這種模式。 它能夠將瀏覽器URL解釋爲導航到客戶端生成視圖的指令。它能夠將可選參數傳遞給支持視圖組件,以幫助肯定要呈現的具體內容。您能夠將路由器綁定到頁面上的連接,並在用戶單擊連接時導航到適當的應用程序視圖。當用戶點擊按鈕,從下拉框中選擇,或者響應來自任何來源的其餘刺激時,您均可以進行命令式導航。而且路由器在瀏覽器的歷史記錄中記錄活動,因此後退和前進按鈕也起做用。web
路由器功能位於angular_router庫中,該庫自帶軟件包。 將該包添加到pubspec依賴項中:api
pubspec.yaml (dependencies)瀏覽器
dependencies: angular: ^4.0.0 angular_router: ^1.0.2
在任何使用路由器功能的Dart文件中,導入路由器庫:app
import 'package:angular_router/angular_router.dart';
若是您已經熟悉Angular路由,請提醒您須要作什麼:ide
有關詳細信息,請參閱聲明路由器提供程序和指令。模塊化
本指南分階段進行,以里程碑爲標誌,從簡單的雙頁面和建築開始,走向帶有子路由的模塊化多視圖設計。 核心路由器概念的這一律述將有助於您定位後面的細節。
<base href>
大多數路由應用程序在index.html <head>中都有一個<base href =「...」>元素來告訴路由器如何編寫導航網址。 有關詳細信息,請參閱設置基礎href。
當瀏覽器的URL更改時,路由器會查找相應的RouteDefinition,從中能夠肯定要顯示的組件。
直到您配置它,路由器纔有路由。 如下示例建立一些路由定義。 它演示了同時建立路由器並使用應用於路由器宿主組件的@RouteConfig添加路由的首選方式:
lib/app_component.dart (routes)
@Component( selector: 'my-app', // ··· ) @RouteConfig(const [ const Route( path: '/crisis-center', name: 'CrisisCenter', component: CrisisCenterComponent), const Route(path: '/heroes', name: 'Heroes', component: HeroesComponent) ]) class AppComponent {}
RouteDefinition有幾種風格。 最多見的,如上所示,是一個命名的路由,它將URL路徑映射到組件。
當此應用的瀏覽器URL成爲/#/heroes時,路由器將該URL與名爲Heroes的RouteDefinition匹配,並在放置在宿主視圖HTML中的RouterOutlet後顯示HeroesComponent。
<router-outlet></router-outlet> <!-- Routed views go here -->
如今,您已經配置了路由並提供了一個渲染它們的地方,但您如何導航? 該URL能夠直接從瀏覽器地址欄中得到。 可是大多數狀況下,因爲某些用戶操做(如點擊錨標籤)迫使您導航。
考慮如下模板:
lib/app_component.dart (template and styles)
template: ''' <h1>Angular Router</h1> <nav> <a [routerLink]="['CrisisCenter']">Crisis Center</a> <a [routerLink]="['Heroes']">Heroes</a> </nav> <router-outlet></router-outlet> ''', styles: const ['.router-link-active {color: #039be5;}'],
錨標籤上的RouterLink指令授予路由控制這些元素。將每一個RouterLink指令綁定到一個模板表達式,該模板表達式將連接參數做爲鏈路參數列表返回。 路由將每一個連接參數列表解析爲完整的URL。
RouterLink指令還有助於在視覺上區分當前所選活動路線的錨點。當關聯的路由連接變爲活動狀態時,路由將router-link-active CSS類添加到元素。如上所示,您能夠在AppComponent的@Component註解中將該樣式與模板一塊兒定義。
該應用程序具備配置的路由。 外殼組件有一個RouterOutlet,它能夠顯示路由產生的視圖。 它具備RouterLink,用戶能夠經過路由點擊進行導航。
如下是關鍵路由術語及其含義:
路由器組成部分 | 涵義 |
---|---|
Router | 顯示活動URL的應用程序組件。 管理從一個組件到下一個組件的導航。 |
@RouteConfig | 使用RouteDefinition列表配置路由。 |
RouteDefinition | 定義路由如何根據URL模式導航到組件。 |
Route | 一種RouteDefinition。 定義路由器如何根據URL模式導航到組件。 大多數路由由路徑,路由名稱和組件類型組成。 |
RouterOutlet | 指示路由應該顯示視圖的指令(<router-outlet>)。 |
RouterLink | 將可點擊HTML元素綁定到路由的指令。 單擊具備綁定到連接參數列表的routerLink指令的元素會觸發導航。 |
Link parameters list | 路由將其解釋爲路由指令的列表。 您能夠將該列表綁定到RouterLink或將該列表做爲參數傳遞給Router.navigate方法。 |
Routing component | 一個帶有RouterOutlet的Angular組件,可根據路由導航顯示視圖。 |
本指南介紹了多頁面路由示例應用程序的開發。 一路上,它突出了設計決策並描述了路由的關鍵特性。
本指南將按照一系列里程碑進行,就像您在逐步構建應用程序同樣。 可是,它不是教程,它掩蓋了文檔中其餘地方更全面地介紹的Angular應用程序構建的細節。
應用程序的最終版本的完整源代碼能夠從實例中查看並下載(查看源代碼)。
想象一下能夠幫助Hero Employment Agency開展業務的應用程序。 英雄須要工做,該機構發現危機讓他們解決。
該應用程序具備如下主要功能:
點擊這個實例連接來查看它(查看源代碼)。 一旦應用程序啓動完成,您將看到一排導航按鈕和帶有英雄列表的英雄視圖。
選擇一個英雄,該應用會將您帶到英雄編輯屏幕。
更名字。 點擊「返回」按鈕,應用程序返回英雄列表,顯示更改的英雄名稱。 注意名稱更改當即生效。
若是您點擊了瀏覽器的後退按鈕而不是「返回」按鈕,該應用程序也會將您返回到英雄列表。 Angular的應用程序像正常的網頁導航同樣更新瀏覽器的歷史。
如今點擊危機中心連接查看正在進行的危機列表。
選擇危機,應用程序會將您帶入危機編輯屏幕。 危機詳情顯示在列表下方的同一頁面上的子視圖中。
改變危機的名稱。 請注意危機列表中的相應名稱不會更改。
與英雄細節不一樣,當您鍵入更新時,危機細節更改是暫時的,直到您經過按下「Save」或「Cancel」按鈕保存或放棄它們。 這兩個按鈕都回到危機中心及其危機列表。
不要單擊任一按鈕。 點擊瀏覽器後退按鈕或「英雄」連接。
向上彈出一個對話框。
您能夠選擇「OK」並丟失您的更改,或單擊「Cancel」並繼續編輯。
這種行爲的後面是路由的routerCanDeactivate掛鉤。 在離開當前視圖導航以前,掛鉤使您有機會清理或詢問用戶的許可。