Я хотел бы создать расширения для некоторых компонентов, уже развернутых в 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";
}
}
Полный рабочий пример в Plunker
Примечание: очевидно, этот пример прост и может быть решен, иначе нет необходимости использовать наследование, но он предназначен только для иллюстрации реальной проблемы.
Как вы можете видеть в реализации производного компонента app/my-panel.component.ts
, большая часть реализации была повторена, и единственная часть, которая действительно была унаследована, была class
BasePanelComponent
, но @Component
должна была быть полностью повторена, а не только измененные части, как selector: 'my-panel'
.
Есть ли какой-нибудь способ сделать буквально полное наследование компонента Angular2, унаследовав, например, class
определение разметки / аннотации @Component
?
Редактировать 1 - Запрос функции
В проект на GitHub добавлен запрос на добавление angular2: аннотации компонентов Extend / Inherit angular2 # 7968
Редактировать 2 - Закрытый запрос
Запрос был закрыт, по этой причине , что в течение короткого времени не будет известно, как объединить декоратор будет сделано. Оставив нас без вариантов. Поэтому мое мнение цитируется в выпуске .