这个里程碑会向你展示如何配置一个名叫路由模块的专用模块,它会保存你应用的路由配置。
路由模块有以下几个特点:
路由应用范例中默认不包含路由。要想在使用 Angular CLI 创建项目时支持路由,请为项目或应用的每个 NgModule 设置 --routing
选项。当你用 CLI 命令 ng new
创建新项目或用 ng generate app
命令创建新应用,请指定 --routing
选项。这会告诉 CLI 包含上 @angular/router
包,并创建一个名叫 app-routing.module.ts
的文件。然后你就可以在添加到项目或应用中的任何 NgModule 中使用路由功能了。
比如,可以用下列命令生成带路由的 NgModule。
ng generate module my-module --routing
这将创建一个名叫 my-module-routing.module.ts
的独立文件,来保存这个 NgModule 的路由信息。该文件包含一个空的 Routes
对象,你可以使用一些指向各个组件和 NgModule 的路由来填充该对象。
在 /app
目录下创建一个 AppRouting
模块,以包含路由配置。
ng generate module app-routing --module app --flat
导入 CrisisListComponent
、HeroListComponent
和 PageNotFoundCompponent
组件,就像 app.module.ts
中那样。然后把 Router
的导入语句和路由配置以及 RouterModule.forRoot()
移入这个路由模块中。
把 Angular 的 RouterModule
添加到该模块的 exports
数组中,以便再次导出它。通过再次导出 RouterModule
,当在 AppModule
中导入了 AppRoutingModule
之后,那些声明在 AppModule
中的组件就可以访问路由指令了,比如 RouterLink
和 RouterOutlet
。
做完这些之后,该文件变成了这样。
import { NgModule } from "@angular/core";
import { RouterModule, Routes } from "@angular/router";
import { CrisisListComponent } from "./crisis-list/crisis-list.component";
import { HeroListComponent } from "./hero-list/hero-list.component";
import { PageNotFoundComponent } from "./page-not-found/page-not-found.component";
const appRoutes: Routes = [
{ path: "crisis-center", component: CrisisListComponent },
{ path: "heroes", component: HeroListComponent },
{ path: "", redirectTo: "/heroes", pathMatch: "full" },
{ path: "**", component: PageNotFoundComponent }
];
@NgModule({
imports: [
RouterModule.forRoot(
appRoutes,
{ enableTracing: true } // <-- debugging purposes only
)
],
exports: [
RouterModule
]
})
export class AppRoutingModule {}
接下来,修改 app.module.ts
文件,从 imports
数组中移除 RouterModule.forRoot
。
import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { FormsModule } from "@angular/forms";
import { AppComponent } from "./app.component";
import { AppRoutingModule } from "./app-routing.module";
import { CrisisListComponent } from "./crisis-list/crisis-list.component";
import { HeroListComponent } from "./hero-list/hero-list.component";
import { PageNotFoundComponent } from "./page-not-found/page-not-found.component";
@NgModule({
imports: [
BrowserModule,
FormsModule,
AppRoutingModule
],
declarations: [
AppComponent,
HeroListComponent,
CrisisListComponent,
PageNotFoundComponent
],
bootstrap: [ AppComponent ]
})
export class AppModule { }
稍后,本指南将向你展示如何创建多个路由模块,并以正确的顺序导入这些路由模块。
应用继续照常运行,你可以把路由模块作为将来每个模块维护路由配置的中心位置。
路由模块(通常称为 AppRoutingModule
)代替了根模板或特性模块中的路由模块。
这种路由模块在你的应用不断增长,以及配置中包括了专门的守卫和解析器服务时会非常有用。
在配置很简单时,一些开发者会跳过路由模块,并将路由配置直接混合在关联模块中(比如 AppModule
)。
大多数应用都应该采用路由模块,以保持一致性。它在配置复杂时,能确保代码干净。它让测试特性模块更加容易。它的存在让人一眼就能看出这个模块是带路由的。开发者可以很自然的从路由模块中查找和扩展路由配置。
验证表单输入通过验证用户输入的准确性和完整性,可以提高整体的数据质量。该页面显示了如何从UI验证用户输入,以及如何在响应式...
测试管道你可以在没有Angular测试工具的情况下测试管道。如果你要试验本指南中所讲的应用,请在浏览器中运行它或下载并在本地运...
将翻译结果合并到应用程序中要将完成的翻译结果合并到你的项目中,请完成以下操作使用AngularCLI构建项目的可分发文件的副本使用...
管理带有自定义ID的已标记文本Angular提取器会生成一个文件,其中包含以下每个实例的翻译单元条目。组件模板中的每个i18n属...
ServiceWorker通知推送通知是吸引用户的一种引人注目的方式。通过ServiceWorker的强大功能,即使你的应用程序不在焦点上,也可以...