gpt4 book ai didi

angularjs-directive - Angular 2 指令现在是 "extensible"吗?

转载 作者:太空狗 更新时间:2023-10-29 17:35:06 24 4
gpt4 key购买 nike

我在 Angular 1 中遇到的最大问题是扩展(在面向对象的意义上)指令有多么困难。

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

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

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

编辑:

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

(@Component 类不是传统的 OO 类,其方法可以分派(dispatch)给子级。它只是一个字段和回调的容器,完全由注释后面的内容驱动。 )

最佳答案

注解不会被继承,所以如果你有:

@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 时,古老的格言“重组合胜过继承”是双重正确的。

最近有人比我聪明得多,“继承会在 child sleep 时谋杀他们”,我本人倾向于坚持这个观点,除非我非常确定它是适合我的用例的工具。

关于angularjs-directive - Angular 2 指令现在是 "extensible"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34310966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com