Gewusst wie: erweitern/vererben Komponenten?

Ich würde gerne Erweiterungen für einige Komponenten bereits im Einsatz in Winkel-2, die zimmerreserviereung, ohne das zu umschreiben, dass Sie fast komplett, da die Basis-Komponente kann Veränderungen erfahren und wollen diese änderungen zeigten sich auch in seiner abgeleiteten Komponenten.

Erstellte ich dieses einfache Beispiel, um zu versuchen, besser zu erklären, meine Fragen:

Mit der Basis-Komponente 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 erstellen eine andere derivative Komponente nur verändern, zum Beispiel, eine grundlegende Komponente Verhalten im Fall von Beispiel Farbe, 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";
  }
}

Funktionsfähiges Beispiel in Plunker

Anmerkung: Offensichtlich dieses Beispiel ist einfach und gelöst werden konnten, die ansonsten keine Notwendigkeit, die Vererbung verwenden, aber es soll nur verdeutlichen das eigentliche problem.

Wie Sie sehen können, in der Umsetzung der derivativen Komponente app/my-panel.component.ts, viel von der Umsetzung wurde wiederholt, wobei die einzelnen Teil wirklich vererbt wurde, die class BasePanelComponent, aber die @Component hatte im Grunde komplett wiederholt, nicht nur die geänderten Teile, wie die selector: 'my-panel'.

Gibt es eine Möglichkeit, um ein buchstäblich voller Vererbung einer Komponente Angular2, Erben class definition der Markierungen/Anmerkungen, wie zum Beispiel @Component?

Bearbeiten 1 - Feature Request

Feature request angular2 Hinzugefügt, um das Projekt auf GitHub: Erweitern/Vererben angular2 Komponenten Anmerkungen #7968

Edit 2 - Geschlossen Anfrage

Die Anfrage geschlossen wurde, aus diesem Grund, dass man sich kurz nicht wissen, wie das Zusammenführen der Dekorateur gemacht werden. Indem Sie uns mit keine Optionen. Also meiner Meinung nach ist in der zitierten Ausgabe.

  • Überprüfen Sie diese Antwort stackoverflow.com/questions/36063627/... Grüße
  • Ok NicolasB. Aber mein problem ist mit der Vererbung der Dekorator @ - Komponente, die ist nicht für die Vererbung von Metadaten. =/
  • Leute, bitte vermeiden Sie die Verwendung von Vererbung mit Winkelgetriebe. z.B. export-Klasse PlannedFilterComponent erstreckt AbstractFilterComponent implementiert OnInit { ist sehr schlecht. Es gibt andere Wege, um code gemeinsam zu nutzen, z.B. Leistungen & kleinere Komponenten. Vererbung ist nicht der Winkel Weg. Ich bin auf eine Winkel-Projekt, wo Sie die Vererbung, und es gibt Dinge, die brechen wie Export-Komponenten Erben von der abstrakten Komponenten-Eingänge von der abstrakten Klasse.
Schreibe einen Kommentar