Ich möchte Erweiterungen für einige Komponenten erstellen, die bereits in Angular 2 bereitgestellt wurden, ohne sie fast vollständig neu schreiben zu müssen, da die Basiskomponente Änderungen unterliegen könnte und wünschte, diese Änderungen würden sich auch in den abgeleiteten Komponenten widerspiegeln.
Ich habe dieses einfache Beispiel erstellt, um meine Fragen besser zu erklären:
Mit folgender Basiskomponente 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);
}
}
Möchten Sie eine andere abgeleitete Komponente erstellen, ändern Sie beispielsweise nur ein grundlegendes Verhalten der Komponente im Fall der Beispielfarbe 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";
}
}
Vollständiges Arbeitsbeispiel in Plunker
Hinweis: Dieses Beispiel ist offensichtlich einfach und könnte gelöst werden, da sonst keine Vererbung erforderlich ist. Es soll jedoch nur das eigentliche Problem veranschaulichen.
Wie Sie in der Implementierung der abgeleiteten Komponente sehen können app/my-panel.component.ts
, wurde ein Großteil der Implementierung wiederholt, und der einzelne Teil, der wirklich geerbt wurde class
BasePanelComponent
, war der , aber der @Component
musste im Grunde vollständig wiederholt werden, nicht nur die geänderten Teile, wie der selector: 'my-panel'
.
Gibt es eine Möglichkeit, eine Komponente Angular2 buchstäblich vollständig zu vererben, indem beispielsweise die class
Definition der Markierungen / Anmerkungen übernommen wird @Component
?
Bearbeiten 1 - Funktionsanforderung
Feature-Anforderung angular2 wurde dem Projekt auf GitHub hinzugefügt: Erweitern / Erben der Angular2-Komponentenanmerkungen # 7968
Bearbeiten 2 - Geschlossene Anfrage
Aus diesem Grund wurde die Anfrage geschlossen, die kurzzeitig nicht wissen würde, wie der Dekorateur zusammengeführt werden soll. Lassen Sie uns keine Optionen. Meine Meinung wird also in der Ausgabe zitiert .