在Angular中,我可以使用以下数据定义路线:
{
path: '/user/:id',
component: UserComponent,
data: {cache: {use: true, class: MyCacheClass}}
}
然后,我可以在组件中注入ActivatedRoute
并访问路线数据。
我还可以使用如下所示的链接参数数组,通过routerLink指令链接到模板中的组件:
<a [routerLink]="['/user', id]">Profile</a>
如果我想通过模板routerLink传递路线数据,则不确定如何。路线数据不是路线的一部分,所以我做不到:
<a [routerLink]="['/user', id,
{cache: {use: true, class: MyCacheClass}}]">
Profile</a>
如果我这样做,Angular将尝试导航到:
/ user / 123; cache = [Object]
能否通过routerLink指令及其链接参数数组传递路由数据,以便我可以从ActivatedRoute
中获取数据?
PS:需要明确的是,我并不是在问如何在url自身中编码对象;我在问如何将其传递给routerLink,以便通过注入ActivatedRoute
或ActivatedRouteSnapshot
并获取其data
属性来获取它
答案 0 :(得分:2)
不能。这违反了Angular路由器的设计。
伙计们使用诸如NGRX / NGXS / Akita之类的状态管理库或自行设计的服务来处理这种模式。
如果您的对象是持久性对象,建议您创建一些哈希图,并在URL中对密钥进行编码。这样,当您从书签等导航时,可以恢复确切的状态。
答案 1 :(得分:0)
是-您可以但只能使用简单(非嵌套)对象。
<a [routerLink]="['/user', id,
{cache: true, class: MyCacheClass, cacheId = 723 }]">
Profile</a>
URL
/user/123;cache=true;class=MyCacheClass;cacheId=723
然后使用示例中的唯一ID或类似方法,在目标页面上使用服务或机制重新加载整个对象。
我建议,然后在那里简单地添加routeData并使用注入的类,例如-StoreService
,您可以使用ID或其他唯一的
由于它将是一个单例,因此您将能够在视图之间访问数据。
您会发现以后需要添加更多东西,这将使分配变得更容易。