如何从Angular 7中的routerLink传递对象

时间:2019-08-20 06:39:02

标签: angular

单击超链接时,将在新标签中打开员工详细信息

<a [routerLink]="['/employee','details',{name:employee.empName}]" target="_blank" ></a>

服务中的对象正按以下方式访问

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any {
     this.name = route.params.name;
}
通过使用上面的代码

能够获取员工姓名,但是我想传递完整的员工对象。 而且数据要追加到网址https://localhost:4200/employee/details;name=xxxx上,我不想将其追加到网址中。

如果我通过转换为string传递员工对象,则正在url中获取数据,但由于我在该对象中有一些链接而获取了“找不到页面”

2 个答案:

答案 0 :(得分:3)

我认为routerLink无法实现您想要的东西。解决方案是获取uuid名员工并将其附加到链接,您的链接将类似于:https://localhost:4200/employee/details/123456789 之后通过uuid检索用户。这是目前最好的解决方案!

答案 1 :(得分:1)

我认为您正在混合两种不同的方式。路由器解析器和路由器参数。

如果使用路由器解析器,则需要正确配置带有resolve参数的路由,并且resolve方法必须返回一个值。数据将通过ActivatedRoute.data传递到组件。

 /* route config */
 { path: 'routePath', component: someComponent, resolve: { person: PersonService } },

 /* resolve method in the PersonService */
 resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
     return this.personData;
 }

 /* get the person in component */
 this.activatedRoute.data.subscribe(data => {
       this.person = data.person;
 });

路由参数是为简单值而非对象而设计的。如果您更喜欢使用params,只需在param中传递唯一的ID(如注释中所述),然后使用ID从服务器获取详细信息。

/** route config **/
{ path: 'routePath/:personId', component: SomeComponent }

/** link in html template **/
<a [routerLink]="['/employee', 'details', personId]"></a>