Я хотів би створити розширення для деяких компонентів, які вже розгорнуті в Angular 2, без необхідності переписувати їх майже повністю, оскільки базовий компонент може зазнати змін і бажаю, щоб ці зміни були відображені також у похідних компонентах.
Я створив цей простий приклад, щоб спробувати пояснити свої питання:
З наступним базовим компонентом 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);
}
}
Ви хочете створити інший похідний компонент лише змінювати, наприклад, поведінку базового компонента у випадку кольору прикладу 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
Примітка: Очевидно, що цей приклад простий і його можна вирішити інакше не потрібно використовувати спадщину, але він призначений лише для ілюстрації реальної проблеми.
Як ви бачите при здійсненні похідного компонента app/my-panel.component.ts
, значна частина реалізації була повторена, і одна насправді успадкована частина була class
BasePanelComponent
, але в @Component
основному довелося повністю повторюватися, а не лише зміненими частинами, як selector: 'my-panel'
.
Чи існує якийсь спосіб зробити буквально повне успадкування компонента Angular2, успадкувавши class
визначення позначок / анотацій, як, наприклад @Component
?
Редагувати 1 - Запит на функцію
Запит на особливості angular2 доданий до проекту на GitHub: Анотації компонентів Extend / Inherit angular2 # 7968
Редагувати 2 - Закритий запит
З цієї причини запит було закрито, щоб коротко не знати, як злити декоратор. Залишаючи нас без варіантів. Тож моя думка цитується у Випуску .