Temel bileşen değişikliklere uğrayabileceğinden ve bu değişikliklerin de türetilmiş bileşenlerine yansıtılmasını dilediğinden, Angular 2'de zaten dağıtılmış bazı bileşenler için uzantıları neredeyse tamamen yeniden yazmak zorunda kalmadan oluşturmak istiyorum.
Sorularımı daha iyi açıklamaya çalışmak için bu basit örneği oluşturdum:
Aşağıdaki temel bileşenle 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);
}
}
Yalnızca başka bir türev bileşen oluşturmak ister misiniz, örneğin, örnek renk durumunda temel bileşen davranışını değiştirmek ister misiniz 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'da eksiksiz çalışma örneği
Not: Açıkçası bu örnek basittir ve aksi halde miras kullanılmasına gerek yoktur, ancak yalnızca gerçek sorunu göstermek amaçlanmıştır.
Türev bileşeninin uygulanmasında görebileceğiniz gibi app/my-panel.component.ts
, uygulamanın çoğu tekrarlandı ve gerçekten miras alınan tek parça class
BasePanelComponent
, ancak, @Component
yalnızca değiştirilen bölümleri değil, tamamen tekrarlanması gerekiyordu selector: 'my-panel'
.
class
Örneğin, işaretlerin / ek açıklamaların tanımını devralarak Angular2 bileşeninin tam anlamıyla kalıtımını almanın bir yolu var mı @Component
?
Düzenleme 1 - Özellik İsteği
GitHub'daki projeye angular2 özellik isteği eklendi: angular2 bileşenleri ek açıklamalarını genişlet / devral
Düzenle 2 - Kapalı İstek
Bu nedenle , dekoratörün nasıl birleştirileceğini kısaca bilmeyen istek kapatıldı . Bizi seçeneksiz bırakmak. Bu yüzden benim düşüncem Sayıda aktarılıyor .