【发布时间】:2017-11-25 12:38:23
【问题描述】:
我们正在使用 Angular 路由器 4.0.0,并且在我们的一个路由中,我们实现了路由器解析器服务,以便在更改路由时向组件提供数据。
但是,当使用 this.router.navigate(绝对或相对,没关系)从 job/1/items 导航到 job/2/items 时,路径会暂时更改为新路径 (2),但随后回到旧的(1)。请注意,在解析服务的解析方法实现中永远不会遇到错误。
我们的路由模块:
@NgModule({
imports: [
RouterModule.forChild([
{ path: "", redirectTo: "all", pathMatch:"full"},
{
path: "all",
canActivate: [AuthGuard],
component: JobsListComponent,
data: { title: 'jobs', listId: 'all', listTitle: 'AllJobs' }
},
{
path: ':id',
canActivate: [AuthGuard],
component: JobDetailComponent,
resolve: { detailData: JobDetailResolve },
children: [
{ path: '', redirectTo: 'feed', pathMatch: 'full' },
{ path: 'feed', component: JobDetailFeedComponent, data: { title: 'feed', isDetail: true } },
{ path: 'items', component: JobDetailItemsComponent, data: { title: 'items', isDetail: true } },
]
},
])
],
exports: [
RouterModule
],
providers: [
JobDetailResolve
]
})
export class JobsRoutingModule { }
我们的解决服务:
@Injectable()
export class JobDetailResolve implements Resolve<JobWithMetadata> {
constructor(private jobsService: JobsService,
private router: Router) { }
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<JobWithMetadata> {
return Observable.create(observer => {
var jobId = route.params["id"];
this.jobsService.getJob(jobId).subscribe(
detailData => {
var data = new JobWithMetadata(detailData.Job, detailData.JobMetadata, detailData.Job.Number);
observer.next(data);
observer.complete();
}, error => {
error.subscribe(data => {
this.router.navigate([AppRoutes.Home,AppRoutes.Jobs]);
observer.next(null);
observer.complete();
});
});
});
}
}
最后是组件内部的代码,在这种情况下,是在点击子组件内部的链接时,输入goToJob2:(click)="goToJob2()"
在 JobDetailItemsComponent 里面我们有上面提到的方法:
ngOnInit() {
this.route.data
.subscribe((data: { detailData: JobWithMetadata }) => {
this.job = data.detailData.Job;
this.initComponent(); // refreshes the component data
});
}
goToJob2() {
this.router.navigate([AppRoutes.Home, AppRoutes.Jobs, "2", "items"]);
}
首先将更改路由到jobs/2/items,但不知何故它返回到jobs/1/items。
对此有何建议?
谢谢
【问题讨论】: