Angular 导航
本指南将介绍在 Ionic 和 Angular 构建的应用中路由是如何工作的。
Angular Router 是 Angular 应用中最重要的库之一。如果没有它,应用将只能停留在单视图或单上下文中,也无法在浏览器刷新时保持导航状态。有了 Angular Router,我们可以创建支持链接跳转和丰富动画(当然,是与 Ionic 配合使用时)的应用。接下来,让我们看看 Angular Router 的基础知识以及如何为 Ionic 应用配置它。
基础路由
对于大多数应用来说,某种形式的路由通常是必需的。最基本的配置如下所示:
import { RouterModule } from '@angular/router';
@NgModule({
imports: [
...
RouterModule.forRoot([
{ path: '', component: LoginComponent },
{ path: 'detail', component: DetailComponent },
])
],
})
简单来说,这就是一个路径与组件的对应关系。当应用加载时,路由器会通过读取用户尝试访问的 URL 来启动。在示例中,我们查找 '' 路径,这实际上是应用的索引路由。因此,会加载 LoginComponent。这种路径匹配组件的模式适用于路由配置中的每一项。但如果我们想在初始加载时跳转到不同的路径呢?
处理重定向
这时我们可以使用路由重定向。重定向的工作方式与典型的路由对象类似,但它包含一些不同的属性。
[
{ path: '', redirectTo: 'login', pathMatch: 'full' },
{ path: 'login', component: LoginComponent },
{ path: 'detail', component: DetailComponent },
];
在这个重定向示例中,我们查找应用的索引路径。如果加载该路径 ,我们会重定向到 login 路由。最后的 pathMatch 属性是必需的,用于告诉路由器如何匹配路径。
因为我们使用了 full,这意味着告诉路由器要比较完整的路径,即使路径类似于 /route1/route2/route3 也是如此。也就是说,如果我们有如下配置:
{ path: '/route1/route2/route3', redirectTo: 'login', pathMatch: 'full' },
{ path: 'login', component: LoginComponent },
那么加载 /route1/route2/route3 时会触发重定向。但如果加载 /route1/route2/route4,则不会重定向,因为路径不完全匹配。
另一种情况,如果我们使用:
{ path: '/route1/route2', redirectTo: 'login', pathMatch: 'prefix' },
{ path: 'login', component: LoginComponent },
那么加载 /route1/route2/route3 和 /route1/route2/route4 时都会被重定向。这是因为 pathMatch: 'prefix' 只匹配路径的部分内容。
导航到不同的路由
谈论路由固然重要,但实际如何进行导航呢?这时可以使用 routerLink 指令。让我们回顾一下之前的简单路由设置:
RouterModule.forRoot([
{ path: '', component: LoginComponent },
{ path: 'detail', component: DetailComponent },
]);
现在,在 LoginComponent 中,我们可以使用以下 HTML 导航到详情页。
<ion-header>
<ion-toolbar>
<ion-title>登录</ion-title>
</ion-toolbar>
</ion-header>
<ion-content class="ion-padding">
<ion-button [routerLink]="['/detail']">进入详情页</ion-button>
</ion-content>
这里的关键是 ion-button 和 routerLink 指令。RouterLink 的工作方式类似于传统的 href,但它的路径可以通过数组构建,从而支持更复杂的路径。