Я создаю приложение с Angular 6 и Redux.
Во многих компонентах, когда мне нужно извлечь данные из хранилища Redux, я использую хорошо документированный шаблон (https://angular.io/guide/router#activated-route-in-action) для извлеченияПараметр route от маршрута. Итак, в простом случае компонент может выглядеть следующим образом:
export class ProjectComponent implements OnInit {
activeProject$: Observable<ActiveProject>;
constructor(private route: ActivatedRoute,
private projectActions: ProjectActions,
private store: NgRedux<AppState>) { }
ngOnInit() {
this.activeProject$ = this.route.paramMap.pipe(
switchMap((params: ParamMap) => {
const id = +params.get('id');
this.projectActions.loadProjectById(id);
return this.store.select<ActiveProject>(['projectList', 'map', id]);
})
);
}
}
Этот довольно понятный и отлично работает. Теперь у меня есть дочерний компонент к вышеуказанному имаршрут к этому компоненту выглядит примерно так:
...
{
path: 'project/:id', component: ProjectComponent,
children: [
{path: 'tool/:toolId', component: ProjectToolComponent }
]
}
...
Итак, в ProjectToolComponent
мне нужно получить оба параметра и получить оба объекта из хранилища: Project
& ProjectTool
.
Какой самый простой способ сделать это? Основная проблема заключается в том, что мне нужен идентификатор проекта для получения объекта инструмента.
Я пытался сделать следующее (внутри моего ProjectToolComponent):
ngOnInit() {
this.tool$ = this.route.parent.paramMap.pipe(
switchMap((parentParams: ParamMap) => {
this.projectId = +parentParams.get('id');
return this.route.paramMap.pipe(
switchMap((params: ParamMap) => {
this.utilizationId = +params.get('utilizationId');
this.projectToolUtilizationActions.loadProjectTools(this.projectId);
return this.store.select<ToolUtilization>(['projectToolsMap', this.projectId]).pipe(
find(tool => tool.id === this.utilizationId)
);
})
);
})
);
}
Но, похоже, это не работает. Я не смог найти никаких документов, связанных с этим делом.