我想为一些已经部署在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";
}
}
< a href = " http://plnkr.co/edit/bWa1JmH7NaSaJffLsl0x?p=preview" rel="noreferrer">在Plunker中完整的工作示例
注意:显然这个例子很简单,不需要使用继承就可以解决,但它只是为了说明真正的问题。
正如你在派生组件app/my-panel.component.ts
的实现中所看到的,大部分实现都是重复的,并且真正继承的单个部分是class
BasePanelComponent
,但是@Component
基本上必须完全重复,而不仅仅是selector: 'my-panel'
所更改的部分。
是否有某种方法可以完全继承angular组件,继承标记/注释的class
定义,例如@Component
?
编辑1 -功能请求
特性请求angular2添加到GitHub上的项目:扩展/继承angar2组件注释#7968
编辑2 -关闭请求