AngularDart 4.0 高級-路由概述

這是路由器頁面的DRAFT,它仍在積極更新。 大部份內容都是準確的,但樣本仍在改進和加強。 歡迎反饋html

當用戶執行應用程序任務時,Angular路由器支持從一個視圖導航到下一個視圖。java

本指南涵蓋路由器的主要功能,經過演示能夠實時運行的小應用程序(查看源代碼)演示它們。git

概觀

瀏覽器是一種熟悉的應用程序導航模型:github

  • 在地址欄中輸入一個URL,而後瀏覽器導航到相應的頁面。
  • 點擊頁面上的連接,瀏覽器導航到新頁面。
  • 點擊瀏覽器的後退和前進按鈕,瀏覽器會先後瀏覽您瀏覽過的網頁的歷史記錄。

Angular路由器借鑑了這種模式。 它能夠將瀏覽器URL解釋爲導航到客戶端生成視圖的指令。它能夠將可選參數傳遞給支持視圖組件,以幫助肯定要呈現的具體內容。您能夠將路由器綁定到頁面上的連接,並在用戶單擊連接時導航到適當的應用程序視圖。當用戶點擊按鈕,從下拉框中選擇,或者響應來自任何來源的其餘刺激時,您均可以進行命令式導航。而且路由器在瀏覽器的歷史記錄中記錄活動,因此後退和前進按鈕也起做用。web

設置概述

添加angular_router

路由器功能位於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與名爲HeroesRouteDefinition匹配,並在放置在宿主視圖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開展業務的應用程序。 英雄須要工做,該機構發現危機讓他們解決。

該應用程序具備如下主要功能:

  1. 一個危機中心,用於維護英雄分配危機清單。
  2. 一個英雄區域,用於維護該機構僱用的英雄名單。

點擊這個實例連接來查看它(查看源代碼)。 一旦應用程序啓動完成,您將看到一排導航按鈕和帶有英雄列表的英雄視圖。

選擇一個英雄,該應用會將您帶到英雄編輯屏幕。

更名字。 點擊「返回」按鈕,應用程序返回英雄列表,顯示更改的英雄名稱。 注意名稱更改當即生效。

若是您點擊了瀏覽器的後退按鈕而不是「返回」按鈕,該應用程序也會將您返回到英雄列表。 Angular的應用程序像正常的網頁導航同樣更新瀏覽器的歷史。

如今點擊危機中心連接查看正在進行的危機列表。

選擇危機,應用程序會將您帶入危機編輯屏幕。 危機詳情顯示在列表下方的同一頁面上的子視圖中。

改變危機的名稱。 請注意危機列表中的相應名稱不會更改。

與英雄細節不一樣,當您鍵入更新時,危機細節更改是暫時的,直到您經過按下「Save」或「Cancel」按鈕保存或放棄它們。 這兩個按鈕都回到危機中心及其危機列表。

不要單擊任一按鈕。 點擊瀏覽器後退按鈕或「英雄」連接。

向上彈出一個對話框。

您能夠選擇「OK」並丟失您的更改,或單擊「Cancel」並繼續編輯。

這種行爲的後面是路由的routerCanDeactivate掛鉤。 在離開當前視圖導航以前,掛鉤使您有機會清理或詢問用戶的許可。

相關文章
相關標籤/搜索