路由
Analog 在 Angular 路由之上支持基于文件系统的路由。
定义路由
路由通过 src/app/pages
目录的文件和子目录来定义。只有文件名以 .page.ts
结尾的文件会被记录并创建路由。
信息
路由组件必须被定义为 default 导出并且所有的路由组件都是懒加载的
路由主要由以下 5 种:
这些路由可以通过不同的方式组合来生成导航 URL。
索引页路由
索引页路由是通过在文件名中加括号的方式定义的。
以下文件 src/app/pages/(home).page.ts
定义了一个 /
路由。
import { Component } from '@angular/core';
@Component({
standalone: true,
template: ` <h2>Welcome</h2> `,
})
export default class HomePageComponent {}
提示
索引页路由也可以通过文件名 index.page.ts
来定义。
静态路由
静态路由是使用文件名作为路由路径来定义的。
以下文件 src/app/pages/about.page.ts
中定义了一个 /about
路由.
import { Component } from '@angular/core';
@Component({
standalone: true,
template: `
<h2>Hello Analog</h2>
Analog is a meta-framework on top of Angular.
`,
})
export default class AboutPageComponent {}
定义多层静态路由有以下两种方式:
- 通过多层目录路由文件来实现 -
src/app/pages/about/team.page.ts
定义了/about/team
路由。 - 通过路由文件的
.
分隔符定义 -src/app/pages/about.team.page.ts
同样定义了/about/team
路由。
路由组
路由文件可以通过放置在一个名字括号的目录里实现路由的分组。
src/
└── app/
└── pages/
└── (auth)/
├── login.page.ts
└── signup.page.ts
以上例子定义了 /login
和 /signup
路由,注意:(auth)不会成为路由 URL 的一部分。
动态路由
动态路由通过文件名中的方括号[]
表示。路由的参数会从路由的地址中抽取。
以下的例子中 src/app/pages/products/[productId].page.ts
定义了 /products/:productId
路由。
import { Component, inject } from '@angular/core';
import { AsyncPipe } from '@angular/common';
import { ActivatedRoute } from '@angular/router';
import { map } from 'rxjs';
@Component({
standalone: true,
imports: [AsyncPipe],
template: `
<h2>Product Details</h2>
ID: {{ productId$ | async }}
`,
})
export default class ProductDetailsPageComponent {
private readonly route = inject(ActivatedRoute);
readonly productId$ = this.route.paramMap.pipe(
map((params) => params.get('productId'))
);
}
动态路由也可以通过文件名中的.