2016-04-25 4 views
4

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

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

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

ответ

4

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

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

+0

Спасибо! Затем я собираюсь выполнить описанный здесь сервисный подход, https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service. –

+0

Это обычно предпочтительный способ. –

0

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

https://stackoverflow.com/a/41151492/4293638