Angular 2 个指令现在 "extensible"?

Are Angular 2 directives now "extensible"?

我对 Angular 1 的最大问题是扩展指令(在 object-oriented 意义上)是多么困难。

例如,几乎不可能在我的自定义小部件上重用 input[number] 指令,我必须 re-implement 所有验证和类型转换代码。

Angular 2 个组件作为 类 实现,因此它们似乎可以轻松扩展。但是,他们也有 @Component 带有非常具体的选择器等的注释,这让我不清楚是否可以完全覆盖这些。

那么 Angular 2 个指令实际上是可扩展的吗?

编辑:

好的,"extensible" 不必扩展 类。它可以创建一个由多个现有指令组成的新指令。我对这种方法的问题是应用 child 指令的机制是什么?

(@Component 类 不是传统的 OO 类,它具有可以分派给 children 的方法。它只是字段和回调的容器完全由注释背后的任何内容驱动。)

注释不是继承的,所以如果您有:

@Directive({
    selector:'foo',
    inputs:['bar']
})
export class Foo  {}


//no annotation
export class FooBar extends Foo {} //not a directive


@Directive({  
   selector:'foobaz' 
}) 
export class FooBaz extends Foo {} //is a directive, but has no inputs 

FooBar 根本不会被识别为指令,FooBaz 会但不会识别 bar 输入(或任何其他输入)。因此,如果继承确实对您的用例最有意义,解决这个问题的方法是声明输入等子 class 注释并将它们作为构造函数参数传递给父 class,您可以在其中封装通用功能。

也就是说,我认为可扩展性并不一定意味着继承,根据我的经验,当涉及到 DI 时,古老的格言 "favor composition over inheritance" 更加正确。

比我聪明得多的人最近说,"inheritance will murder your children in their sleep",我自己也倾向于坚持这个观点,除非我非常确定它是适合我的用例的工具。