我对 Angular 1 遇到的最大问题是扩展指令(在面向对象的意义上)是多么困难。
例如,几乎不可能重复使用input[number]
我的自定义小部件上的指令,我必须重新实现所有验证和类型转换代码。
Angular 2 组件是作为类实现的,因此看起来它们可以很容易地扩展。不过,他们也有这样的@Component
带有非常具体的选择器等的注释,这让我不清楚这些是否可以被完全覆盖。
那么 Angular 2 指令实际上是可扩展的吗?
Edit:
好吧,“可扩展”不一定是扩展类。它可以创建一个由多个现有指令组成的新指令。我对这种方法的问题是应用子指令的机制是什么?
(The @Component
类不是传统的 OO 类,其方法可以分派给子类。它只是一个字段和回调的容器,完全由注释背后的内容驱动。)
注释是not继承的,所以如果你有:
@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
输入(或任何其他)。所以,如果继承是really什么对您的用例最有意义,解决此问题的方法是在子类注释中声明输入等,并将它们作为构造函数参数传递给父类,您可以在父类中封装常见功能。
也就是说,我认为可扩展性并不一定意味着继承,根据我的经验,当涉及 DI 时,古老的格言“优先考虑组合而不是继承”是双重正确的。
比我聪明得多的人最近说过,“继承会在你的孩子睡梦中谋杀他们”,我自己倾向于坚持这个观点,除非我非常确定它是适合我的用例的工具。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)