我一直在尝试学习 angular 2 以及本教程[Build an application with Angular 2 and Firebase][1]
并尝试对其进行扩展。但是我在尝试嵌套多条路线时遇到了障碍。
应用结构:
Goals – (has router-outlet)
> Single Goal with Experiments list – (has router-outlet)
> Single Experiment – (has router-outlet)
> Experiment Notes
路由器设置:
export const routerConfig : Route[] = [
{
path: 'goals',
children: [
{
path: ':id', component: SingleGoalComponent,
children: [
{
path: 'experiments',
children: [
{ path: ':id', component: ExperimentDetailsComponent,
children: [
{ path: '', redirectTo: 'notes', pathMatch: 'full' },
{ path: 'notes', component: ExperimentNotesComponent }
]
},
{ path: 'new', component: NewExperimentComponent },
{ path: '' }
]
},
{ path: '', redirectTo: 'experiments', pathMatch: 'full' }
]
},
{ path: '', component: GoalsComponent }
]
},
{ path: 'notes', component: NotesComponent },
{ path: '', redirectTo: 'goals', pathMatch: 'full' },
{ path: '**', redirectTo: 'goals', pathMatch: 'full' }
];
问题
如果我单击实验列表中的实验 1,我得到goals/1/experiments/1/notes
的 url 是正确的,并且我看到了正确的实验 1 的注释。
如果我然后单击实验列表中的实验 2goals/1/experiments/2/notes
,则 url 是正确的,实验详细信息是正确的,但注释仍然是实验 1 的注释。
如果我然后刷新浏览器,将加载实验 2,并且注释现在是实验 2 的注释,这是正确的。
这就是我获取experimentId
笔记的方式
实验笔记.component.ts
experimentId: string;
goalId: string;
constructor(
private router: Router,
private route: ActivatedRoute,
private experimentsService: ExperimentsService,
private _location: Location) { }
ngOnInit() {
Observable.combineLatest(this.route.parent.params, this.route.parent.parent.params)
.forEach((params: Params[]) => {
this.experimentId = params[0]['id'];
this.goalId = params[1]['id'];
});
console.log('Experiment ID: ' + this.experimentId + '| Goal Id: ' + this.goalId);
this.notes$ = this.experimentsService.findAllNotesForExperiment(this.experimentId);
我确信这是我正在犯的一个明显的错误,但对于我的生活,我看不出我在哪里出错了。