Angular2 - @ViewChild из базового абстрактного класса TypeScript

Я искал @ это так Q & A, и задавался вопросом, можно ли было иметь базу abstract class вместо? Скорее чем interface, возможно ли иметь разные реализации базового класса в дочерних компонентах, которые доступны для родительского компонента через @ViewChild декоратор в Angular2?

В идеале я хотел бы иметь средства для дочерних компонентов, которые создаются с помощью родителя Router быть способным вызывать родительский маршрутизатор - имеет ли это смысл? Я хочу чтобы ребенок мог звонить parentRouter.navigate(["SomeOtherRoute", { args: 'blah' }]);,

Мой первоначальный подход состоял в том, чтобы дочерние компоненты реализовали базовый класс, на который родительский компонент получал бы ссылку через @ViewChild декоратор. Родитель будет subscribe к действию ребенка, пытающегося вызвать событие навигации, и его обработчик вызовет router.navigate (поскольку у него есть маршрутизатор на родительском уровне).

3 ответа

Решение

Вы не можете использовать @ViewChildren() или любой из подобных декораторов для запроса подклассов компонентов.

Поддерживаются только имена переменных шаблонов и конкретных типов компонентов и директив (типы, которые на самом деле создаются как компоненты в вашем представлении).

Это на самом деле довольно просто. Например, если у вас есть класс EmployeeComponent, который расширяет PersonComponent, который является абстрактным классом.

Вы можете сделать это доступным, добавив это в EmployeeComponent:

providers: [ {provide: PersonComponent, useExisting: EmployeeComponent }]

И используйте ViewChildren() или ContentChildren() в вашем компоненте контейнера следующим образом:

@ViewChildren(PersonComponent) public persons: QueryList<PersonComponent>;

Да! Это возможно, и я считаю, что в некоторых случаях это может быть чище, хотя для вашего случая использования я думаю, что услуга предпочтительнее. Смотрите мой ответ на оригинальный вопрос об интерфейсах. Возможно, мне следовало бы опубликовать это здесь.

/questions/32120494/mozhet-li-dekorator-viewchildren-v-angular2-rabotat-s-interfejsami/32120508#32120508

Другие вопросы по тегам