首页 文章

在Angular 2中的模板中键入cast

提问于
浏览
14

我正在研究一个Angular项目(Angular 4.0.0),我无法将抽象类的属性绑定到ngModel,因为我首先需要将它作为实际的具体类来转换为访问该属性 .

即我有一个AbstractEvent类,它有一个具体的实现Event,它有一个布尔属性'acknowigned',我需要通过ngModel双向绑定来设置一个复选框 .

我目前在我的DOM中有这个元素:

<input type="checkbox" *ngIf="event.end" [(ngModel)]="(event as Event).acknowledged" 
                                          [disabled]="(event as Event).acknowledged">

不幸的是,这会引发以下错误:

未捕获错误:模板解析错误:分析器错误:缺少预期)在第8列[(事件为事件) . 已确认]

谷歌搜索似乎表明这可能是因为在模板中使用它时不支持使用'as'?虽然我不确定这一点 .

我也无法弄清楚如何在驱动模板的typescript文件中为它编写一个函数,因为这会破坏我需要的ngModel上的双向绑定 .

如果有人有办法解决这个问题或正确地在角度模板中进行类型转换,我将非常感激!

1 回答

  • 17

    这是不可能的,因为无法从模板中引用 Event .

    (模板绑定表达式中也不支持 as )您需要先使其可用:
    class MyComponent {
    EventType =事件;
    然后这应该工作[(ngModel)] =“(事件作为EventType).acknowledged”

    update

    class MyComponent {
      asEvent(val) : Event { return val; }
    

    然后用它作为

    [(ngModel)]="asEvent(event).acknowledged"
    

相关问题