2017-03-07 87 views
2

我有以下BaseComponent。Angular 2 - 从基类继承提供者

@Component({ 
    providers: [PresetService, CollectionService, RecordService] 
}) 
export class BaseComponent{ 
    constructor(private collectionService:CollectionService, private recordService:RecordService, private presetService:PresetService){ 
    } 
} 

现在所有的孩子都应该继承提供商,它的实例:

我有以下BaseComponent。

@Component({ 
}) 
export class ChildComponent extends BaseComponent{ 
    constructor(){ 
     super() 
    } 
} 

这似乎不可能,因为我需要从孩子调用超级。所以我需要传递给提供者实例从一个孩子到另一个孩子。父母是否可以提供实例?

回答

1

https://github.com/angular/angular/commit/f5c8e09

装饰:

1)列出类的在 祖先一级

2)只使用各种的最后装饰的装饰和它的父母(如 @Component/...)

构造函数参数:如果一个类继承父类,并且 不声明构造函数,它继承父类 的构造函数,并使用它构造该父类的参数元数据。

生命周期挂钩:遵循普通的类继承模型,即 父类的生命周期挂钩将被调用,即使方法是 未在子类中被覆盖。

至于解决方法,你可以使用

const baseComponentProviders = [PresetService, CollectionService, RecordService]; 

@Component({ 
    providers: baseComponentProviders 
}) 
class BaseComponent { 

} 
@Component({ 
    providers: baseComponentProviders 
}) 
export class ChildComponent extends BaseComponent{ 
    constructor(){ 
     super() 
    } 
}