我对Angular 1的最大问题是扩展(在面向对象的意义上)指令是多么困难。
例如,几乎不可能在我的自定义小部件上重用input[number]
指令,我不得不重新实现所有验证和类型转换代码。
Angular 2组件作为类实现,因此它们似乎可以轻松扩展。但是,他们也有@Component
注释和非常具体的选择器等,这使我不清楚是否可以完全覆盖它们。
Angular 2指令实际上是可扩展的吗?
编辑:
好的,"可扩展"不必扩展课程。它可以创建一个由多个现有指令组成的新指令。我对这种方法的问题是应用子指令的机制是什么?
(@Component
类不是传统的OO类,它们具有可以分配给子节点的方法。它只是一个字段和回调的容器,完全由注释背后的内容驱动。)
答案 0 :(得分:5)
注释不继承,所以如果你有:
@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
输入(或其他任何内容)。所以,如果继承真的对你的用例最有意义,那么接近这个的方法就是在子类注释中声明输入等并传递它们作为父类的构造函数参数,您可以在其中封装常用功能。
那就是说,我不认为可扩展性必然意味着继承,而且根据我的经验,古老的格言有利于构成而不是继承"当DI涉及时,是双重的。
有人比我最近说的更聪明,"继承会在睡梦中谋杀你的孩子"我倾向于自己坚持这个观点,除非我真的知道它是我的用例的正确工具。