Лично я бы отбросил прямую связь с экземпляром компонента и вместо этого использовал бы свойство data
маршрута, учитывая, что:
- Вы никак не взаимодействуете с экземпляром компонента.
- Вы сопоставляете тип экземпляра компонента со статическим значением.
При условии следующего определения маршрутов:
const routes: Routes = [
{
path: 'production',
component: ProductionParent,
data: {parentRoute :'Production'},
children: [{path: '', component: Child}]
},
{
path: 'system',
component: SystemParent,
data: {parentRoute :'System'},
children: [{path: '', component: Child}]
}
];
@Component({})
export class ProductionParent{}
@Component({})
export class SystemParent{}
@Component({})
export class Child implements OnInit, OnDestroy {
private parentSub = Subscription.EMPTY;
parentRoute :string;
constructor(private readonly route: ActivatedRoute){}
ngOnInit(){
this.trackParent();
}
ngOnDestroy(){
this.parentSub.unsubscribe();
}
private trackParent(){
this.parentSub = this.route.parent
.data
.subscribe(data => this.parentRoute = data.parentRoute || 'unknown');
}
}
Скорее всего, это может быть реализовано другими способами., но это первый прагматический подход, который пришел мне в голову.Надеюсь, это поможет.