单击超链接时,将在新标签中打开员工详细信息
<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中获取数据,但由于我在该对象中有一些链接而获取了“找不到页面”
答案 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>