У меня есть базовый компонент, который расширен его дочерними элементами. Мне нужно передать свойство в дочерний компонент, который будет использоваться в конструкторе базового компонента.
Я решил эту проблему с помощью промежуточного сервиса, потому что мне нужно сделать что-то в конструкторе базовых компонентов, что я не смог сделать в ngInit()
.
Я пытался использовать строковый параметр в конструкторе, например constructor(injector: Injector, holderName: string)
, но он не работает.
Есть ли более простая альтернатива использованию промежуточного сервиса?
Это мой дочерний компонент:
@Component({
selector: 'app-child',
templateUrl: './child.component.html',
styleUrls: ['./child.component.css'],
providers: [DataService]
})
export class ChildComponent extends ParentComponent implements OnInit {
constructor(injector: Injector, childService:DataService ) {
childService.componentName = 'Child';
super(injector, childService);
console.log('childService '+childService.componentName)
}
ngOnInit() {
}
}
Это мой базовый компонент
@Component({
template: ''
})
export class ParentComponent {
private componentName: string;
constructor(injector: Injector, @Optional() parentService:DataService = null ) {
if (parentService !== undefined && parentService !== null)
{
this.componentName = parentService.componentName;
console.log('parentService '+parentService.componentName);
//Do Something important.
}
}
}
@Injectable()
export class DataService {
componentName:string=null;
}
С наилучшими пожеланиями