【发布时间】:2019-05-13 16:10:11
【问题描述】:
我的组件使用主机绑定装饰器来显示组件选择器,以便它们占据所有可用宽度:
@HostBinding('style.width.%')
@HostBinding('style.height.%')
private readonly SIZE = 100;
@HostBinding('style.display')
private readonly DISPLAY = 'block';
@HostBinding('style.box-sizing')
private readonly BOX_MODEL = 'border-box';
我想做的是创建一个包含所有这些装饰器的单个装饰器(在类或属性级别,我不在乎),这样我就不必每次都重写。
现在,我通过创建一个超类并让我的其他类扩展它来使其工作,但是它有很多限制和不便,因此我提出了问题。
非常感谢任何帮助,即使是文档!
编辑我也找到了this SOF question,但与我的问题不同的是变量具有值,我似乎无法找到如何将这些值传递给我的装饰器。
EDIT 2解释我的需要:我有这个组件
@Component(...)
export class MyAngularComponent extends HostBinderComponent {...}
还有这个
export class HostBinderComponent {
@HostBinding('style.width.%')
@HostBinding('style.height.%')
private readonly SIZE = 100;
@boxComponent()
private readonly DISPLAY;
@HostBinding('style.box-sizing')
private readonly BOX_MODEL = 'border-box';
}
我的最终目标是删除超类并拥有类似
@Component(...)
@BoxComponent()
export class MyAngularComponent {...}
这样我就不必再在我的 Angular 组件中使用 extends 或 HostBinding 了!
【问题讨论】:
-
您希望装饰器仅应用于这些确切的属性?有这些确切的值吗?
-
@TitianCernicova-Dragomir 为了便于理解,是的,我只是想要一个装饰器,例如(例如)
@BoxComponent,它将所有这 4 个装饰器应用于一个类(具有给定的值) -
@trichetriche(删除最后一个代码块中的扩展)
标签: angular typescript decorator