Chciałbym stworzyć rozszerzenia dla niektórych komponentów już wdrożonych w Angular 2, bez konieczności ich prawie całkowitego przepisywania, ponieważ komponent podstawowy mógłby podlegać zmianom i chciałbym, aby te zmiany również znalazły odzwierciedlenie w komponentach pochodnych.
Stworzyłem ten prosty przykład, aby lepiej wyjaśnić moje pytania:
Z następującym składnikiem podstawowym 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);
}
}
Czy chciałbyś stworzyć inny składnik pochodny tylko zmienić np. Podstawowe zachowanie komponentu w przypadku przykładowego koloru 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";
}
}
Kompletny przykład roboczy w Plunker
Uwaga: Oczywiście ten przykład jest prosty i mógłby zostać rozwiązany w przeciwnym razie nie ma potrzeby używania dziedziczenia, ale ma on jedynie zilustrować rzeczywisty problem.
Jak widać w implementacji składnika pochodnego app/my-panel.component.ts
, większość implementacji została powtórzona, a pojedyncza część naprawdę odziedziczyła class
BasePanelComponent
, ale w @Component
zasadzie musiała zostać całkowicie powtórzona, a nie tylko zmienione części, ponieważ selector: 'my-panel'
.
Czy jest jakiś sposób na dosłownie pełne dziedziczenie komponentu Angular2, dziedzicząc na przykład class
definicję oznaczeń / adnotacji @Component
?
Edycja 1 - żądanie funkcji
Żądanie funkcji angular2 dodane do projektu na GitHub: Rozszerz / dziedzicz adnotacje komponentów angular2 # 7968
Edycja 2 - żądanie zamknięte
Prośba została zamknięta, z tego powodu , że na krótko nie wiedziałem, jak scalić dekorator zostanie wykonany. Zostawiając nas bez opcji. Tak więc moja opinia jest cytowana w numerze .