Vorrei creare estensioni per alcuni componenti già distribuiti in Angular 2, senza doverli riscrivere quasi completamente, poiché il componente di base potrebbe subire modifiche e desiderare che tali modifiche si riflettessero anche nei suoi componenti derivati.
Ho creato questo semplice esempio per cercare di spiegare meglio le mie domande:
Con il seguente componente di base 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);
}
}
Vorresti creare un altro componente derivato solo alterare, ad esempio, un comportamento di base del componente nel caso del colore di esempio 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";
}
}
Esempio di lavoro completo in Plunker
Nota: ovviamente questo esempio è semplice e potrebbe essere risolto altrimenti non è necessario utilizzare l'ereditarietà, ma è inteso solo per illustrare il vero problema.
Come puoi vedere nell'implementazione del componente derivato app/my-panel.component.ts
, gran parte dell'implementazione è stata ripetuta e la singola parte realmente ereditata è stata la class
BasePanelComponent
, ma @Component
in sostanza ha dovuto essere completamente ripetuta, non solo le parti modificate, come la selector: 'my-panel'
.
Esiste un modo per creare un'eredità letteralmente piena di un componente Angular2, ereditando la class
definizione dei segni / annotazioni, come ad esempio @Component
?
Modifica 1 - Richiesta funzionalità
Richiesta di funzione angular2 aggiunta al progetto su GitHub: Estendi / Eredita annotazioni componenti angular2 # 7968
Modifica 2 - Richiesta chiusa
La richiesta è stata chiusa, per questo motivo , che per un breve periodo non saprebbe come unire il decoratore verrà effettuata. Lasciandoci senza opzioni. Quindi la mia opinione è citata nel numero .