Предполагая, что родительские компоненты не имеют никаких иерархических отношений или являются братьями и сестрами, самый простой способ сделать это с безопасностью типов - создать enum
для вашего родительского типа:
export enum Parent {
ParentA = 'Parent A',
ParentB = 'Parent B'
}
Затем вы можете создать @Input
свойство в вашем ChildComponent
, что-то вроде этого:
import { Component, Input } from '@angular/core';
import { Parent } from './parent-type.enum';
@Component({
selector: 'child',
template: `<h1>My Parent IS {{ parent }}</h1>`,
styles: [`h1 { font-family: Lato; }`]
})
export class ChildComponent {
@Input() parent: Parent;
}
и использовать его так у своих родителей:
Для родительского компонента 1:
import { Component, Input } from '@angular/core';
import { Parent } from './parent-type.enum';
@Component({
selector: 'parent-a',
template: `<child [parent]="parent"></child>`,
styles: [`h1 { font-family: Lato; }`]
})
export class ParentAComponent {
parent = Parent.ParentA;
}
Для родительского компонента 2
import { Component, Input } from '@angular/core';
import { Parent } from './parent-type.enum';
@Component({
selector: 'parent-b',
template: `<child [parent]="parent"></child>`,
styles: [`h1 { font-family: Lato; }`]
})
export class ParentBComponent {
parent = Parent.ParentB;
}
Вот пример Образец StackBlitz для вашей ссылки.