Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs directive 现在是“2指令”吗;可扩展";?_Angularjs Directive_Angular_Angular2 Directives - Fatal编程技术网

Angularjs directive 现在是“2指令”吗;可扩展";?

Angularjs directive 现在是“2指令”吗;可扩展";?,angularjs-directive,angular,angular2-directives,Angularjs Directive,Angular,Angular2 Directives,Angular 1的最大问题是(在面向对象的意义上)扩展一个指令有多困难 例如,在自定义小部件上重用input[number]指令几乎是不可能的,我必须重新实现所有验证和类型转换代码 Angular 2组件被实现为类,因此看起来它们可以很容易地扩展。然而,它们也有带有非常特定选择器的@组件注释等,这使我不清楚这些是否可以完全覆盖 那么Angular 2指令实际上是可扩展的吗 编辑: 好的,“可扩展”不一定要扩展类。它可以创建由多个现有指令组成的新指令。我对这种方法的问题是,应用child指令的机

Angular 1的最大问题是(在面向对象的意义上)扩展一个指令有多困难

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

Angular 2组件被实现为类,因此看起来它们可以很容易地扩展。然而,它们也有带有非常特定选择器的
@组件
注释等,这使我不清楚这些是否可以完全覆盖

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

编辑:

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

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

注释不会被继承,因此如果您有:

@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时,“支持组合而不是继承”这句老话是双重正确的


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

嗨,我完全同意你的观点“偏好组合而非继承”,但对于角度组件来说并不是那么简单。见我的编辑上面。