j'ai la structure de composants suivante
Donc mon routage ressemble à ceci:
const childroutes = [
{
path: '',
children: [
{ path: 'edit', component: EditProjectComponent},
{ path: 'subres1', component: Subres1Component},
{ path: 'subres2', component: Subres2Component},
{ path: 'subres3', component: Subres3Component},
{ path: 'subres4', component: Subres4Component}
]
}
]
{
path: 'project/:projectId',
component: ProjectDetailComponent,
children: childroutes,
resolve: { project: ProjectResolver} /** resolve Project from ProjectService **/
}
Comme vous pouvez le voir, je résous mes données de projet à partir d'un service et je peux y accéder dans ProjectDetailComponent via
this.route.snapshot.data
Alors maintenant, la question est, comment puis-je transmettre les données résolues dans "EditProjectComponent" à tous ses composants childroutes?
J'ai maintenant que je pouvais faire ce qui suit pour résoudre les données de projet dans les composants enfants:
const childroutes = [
{
path: '',
children: [
{ path: 'edit', component: EditProjectComponent,resolve: { project: ProjectResolver}},
{ path: 'subres1', component: Subres1Component,resolve: { project: ProjectResolver}},
{ path: 'subres2', component: Subres2Component,resolve: { project: ProjectResolver}},
{ path: 'subres3', component: Subres3Component,resolve: { project: ProjectResolver}},
{ path: 'subres4', component: Subres4Component,resolve: { project: ProjectResolver}}
]
}
]
Mais cela semble moche et faux.
Vous avez deux options ici:
1. Vous pouvez accéder aux données de résolution des parents via le résolveur de l'enfant en créant un résolveur spécifique à l'enfant et en accédant à la propriété parent de la route.
[... module.ts | ... component.ts]
{
path: 'project/:projectId',
component: ProjectDetailComponent,
resolve: { project: ProjectResolver }
children: [
{
path: ':projectId/edit',
component: EditProjectComponent,
resolve: { edit: EditProjectResolve }
}
]
}
edit-project-component.ts
ngOnInit() {
this.edit = this.route.snapshot.data.edit;
}
2. Vous pouvez contourner le résolveur de l'enfant tous ensemble et accéder aux données des parents à partir du composant enfant.
[... module.ts | ... component.ts]
{
path: 'project/:projectId',
component: ProjectDetailComponent,
resolve: { project: ProjectResolver }
children: [
{
path: ':projectId/edit',
component: EditProjectComponent
}
]
}
edit-project-component.ts
ngOnInit() {
this.route.parent.data
.subscribe((data) => {
this.edit = data.edit;
});
}