gpt4 book ai didi

inheritance - angular2 扩展组件但保留模板

转载 作者:太空狗 更新时间:2023-10-29 17:28:42 25 4
gpt4 key购买 nike

有没有办法扩展/继承 angular2 组件?

假设(为了简单起见)我有一个 Button 组件。基于此组件,我想将其扩展为 RedButton 组件,但使用相同的模板和初始化方法,但仅更改用户按下按钮时发生的情况。这怎么可能?


到目前为止,这是我尝试过的:

按钮.component.ts

import {Component, View} from 'angular2/core';

@Component({
selector : 'my-button'
})
@View({
template : '<button (click)="clicked()">Click</button>'
})
export class ButtonComponent {

constructor() {
}

public clicked(event) {
console.log('Base clicked');
}
}

redbutton.component.ts

import {Component, View} from 'angular2/core';

import {ButtonComponent} from './button.component';

@Component({
selector : 'my-redbutton'
})
// typescript complaints here, that RedButton needs a View and template
export class RedButtonComponent extends ButtonComponent {

constructor() {
super();
}

public clicked(event) {
console.log('RED clicked');
}
}

应用程序组件.ts

import {Component} from 'angular2/core';
import {ButtonComponent} from './button.component';
import {RedButtonComponent} from './redbutton.component';

@Component({
selector: 'coach-app',
directives : [ButtonComponent, RedButtonComponent],
template: '<h1>Button Test App</h1><my-button></my-button><my-redbutton></my-redbutton>'
})
export class TestAppComponent { }

最佳答案

(目前?)不支持扩展类和继承模板。您可以做的是使用 DI 来配置您的组件。

interface ButtonBehavior {
component:any;
onClick(event);
}

class DefaultButtonBehavior implements ButtonBehavior {
component:any;
onClick(event) {
console.log('default button clicked');
}
}

class FancyButtonBehavior implements ButtonBehavior {
component:any;
onClick(event) {
console.log('default button clicked');
}
}

class ButtonComponent {
constructor(private buttonBehavior:ButtonBehavior) {
buttonBehavior.component = this.
}
}

bootstrap(AppComponent, [provide(ButtonBehavior, {useClass: FancyButtonBehavior})])

输入和输出需要额外的接线,因此不太方便但可行。

关于inheritance - angular2 扩展组件但保留模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35583012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com