Angular2 -- 来自 TypeScript 基础抽象的 @ViewChild class

Angular2 -- @ViewChild from TypeScript base abstract class

我在看@this SO Q & A,想知道是否可以用一个基数 abstract class 代替?除了 interface,是否有可能在 child 组件中有不同的基础 class 实现,parent 组件可以通过 @ViewChild 装饰器访问这些实现在 Angular2?

理想情况下,我希望有一种方法可以让通过 parent Router 实例化的 child 组件能够调用 parent 路由器 --那有意义吗?我希望 child 能够调用 parentRouter.navigate(["SomeOtherRoute", { args: 'blah' }]);.

我最初的方法是让 child 组件实现一个基础 class,parent 组件将通过 @ViewChild 装饰器获取对它的引用。 parent 将 subscribe 响应 child 尝试调用导航事件的操作,并且其处理程序将调用 router.navigate(因为它在 parent级)。

您不能使用 @ViewChildren() 或任何类似的装饰器来查询组件的子类。

仅支持模板变量的名称以及具体组件和指令类型(在您的视图中实际实例化为组件的类型)。

是的!这是可能的,我发现在某些情况下它可以更清洁,但对于您的用例,我认为服务更可取。请参阅我对有关接口的原始问题的回答。我也许应该把它贴在这里。

其实很简单。例如,如果您有一个扩展 PersonComponent 的 class EmployeeComponent,它是一个抽象 class.

您可以通过在 EmployeeComponent 中添加以下内容使其变得平易近人:

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

并在您的容器组件中使用 ViewChildren() 或 ContentChildren(),如下所示:

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