角度:通过链接参数数组传递路线数据

时间:2018-08-23 13:47:59

标签: angular angular6 angular-routing

在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,以便通过注入ActivatedRouteActivatedRouteSnapshot并获取其data属性来获取它

2 个答案:

答案 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或其他唯一的

由于它将是一个单例,因此您将能够在视图之间访问数据。

您会发现以后需要添加更多东西,这将使分配变得更容易。