我想为已经部署在Angular 2中的某些组件创建扩展,而不必几乎完全重写它们,因为基础组件可以进行更改,并希望这些更改也能反映在其派生组件中。
我创建了这个简单的示例,以尝试更好地解释我的问题:
具有以下基本组件app/base-panel.component.ts
:
import {Component, Input} from 'angular2/core';
@Component({
selector: 'base-panel',
template: '<div class="panel" [style.background-color]="color" (click)="onClick($event)">{{content}}</div>',
styles: [`
.panel{
padding: 50px;
}
`]
})
export class BasePanelComponent {
@Input() content: string;
color: string = "red";
onClick(event){
console.log("Click color: " + this.color);
}
}
您是否要仅创建另一种派生成分,例如,在示例颜色的情况下,基本成分的行为为app/my-panel.component.ts
:
import {Component} from 'angular2/core';
import {BasePanelComponent} from './base-panel.component'
@Component({
selector: 'my-panel',
template: '<div class="panel" [style.background-color]="color" (click)="onClick($event)">{{content}}</div>',
styles: [`
.panel{
padding: 50px;
}
`]
})
export class MyPanelComponent extends BasePanelComponent{
constructor() {
super();
this.color = "blue";
}
}
注意:显然,此示例很简单,可以解决,否则无需使用继承,但是它仅用于说明实际问题。
正如您在派生组件的实现中看到的那样app/my-panel.component.ts
,重复了很多实现,真正继承的单个部分是class
BasePanelComponent
,但@Component
必须基本上完全重复,而不仅仅是更改部分selector: 'my-panel'
。
例如,是否有某种方法可以使Angular2组件真正地完全继承,例如继承class
标记/注释的定义@Component
?
编辑1-功能请求
在GitHub上的项目中添加了功能请求angular2:扩展/继承angular2组件注释#7968
编辑2-已关闭的请求
由于这个原因,该请求已关闭,即短暂地将不知道如何合并装饰器。别无选择。因此,我在Issue中引用了我的观点。