9

我在看@这个 SO Q & A,想知道是否可以有一个基地abstract class?而不是interface, 是否可以在子组件中具有不同的基类实现,父组件可以通过Angular2@ViewChild中的装饰器访问?

理想情况下,我希望有一种方法让通过父级实例化的子组件Router能够调用父级路由器——这有意义吗?我希望孩子能够打电话parentRouter.navigate(["SomeOtherRoute", { args: 'blah' }]);

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

4

3 回答 3

18

其实很简单。例如,如果您有一个 EmployeeComponent 类,它扩展了作为抽象类的 PersonComponent。

您可以通过在 EmployeeComponent 中添加它来使它变得平易近人:

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

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

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

于 2018-07-02T12:39:41.280 回答
4

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

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

于 2016-04-25T13:46:39.090 回答
1

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

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

于 2016-12-14T20:24:45.917 回答