我正在做一个Angular项目(Angular 4.0.0),我很难将抽象类的属性绑定到ngModel,因为我首先需要将它转换为实际的具体类,以便访问该属性.

i、 e.我有一个AbstractEvent类,这是一个具体的实现事件,它有一个布尔属性"已确认",我需要通过ngModel进行双向绑定,并设置一个复选框.

我目前在DOM中有以下元素:

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

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

未捕获错误:模板分析错误:

谷歌搜索似乎表明这可能是因为在模板中使用"as"不受支持?尽管我对此不确定.

我也不知道如何在驱动模板的typescript文件中为它编写函数,因为这会 destruct 我需要的ngModel上的双向绑定.

如果有人有任何方法可以绕过这一点,或执行正确的Angular 模板类型铸造我会非常感激!

推荐答案

如前所述,使用基本方法调用将对性能产生影响.

更好的方法是使用管道,这两个方面都是最好的.只需定义一个铸管:

@Pipe({
  name: 'cast',
  pure: true
})
export class CastPipe implements PipeTransform {  
  transform(value: any, args?: any): Event {
    return value;
  }
}

然后在模板中,需要演员时使用event | cast.

这样,更改检测保持高效,并且键入是安全的(考虑到请求的类型更改是合理的).

不幸的是,由于name属性,我看不到有这种通用性的方法,所以必须为每种类型定义一个新管道.

Typescript相关问答推荐

为什么仅对对象而不对简单类型需要满足?

接口DOMRouter选项未输出

创建一个将任意命名类型映射到其他类型的TypScript通用类型

如何将http上下文附加到angular中翻译模块发送的请求

为什么从数组中删除一个值会删除打字错误?

如何将类型从变量参数转换为返回中的不同形状?

在键和值为ARGS的泛型函数中未正确推断类型

React重定向参数

TypeScrip-将<;A、B、C和>之一转换为联合A|B|C

类型脚本返回的类型包含无意义的泛型类型名称

了解类型规则中的关键字

按函数名的类型安全类型脚本方法包装帮助器

是否可以强制静态方法将同一类型的对象返回其自己的类?

TypeScrip-如何自动推断UNION变量的类型

基于未定义属性的条件属性

如何在具有嵌套数组的接口中允许新属性

从以下内容之一提取属性类型

TypeScrip:从嵌套的对象值创建新类型

为什么受歧视的unions 在一种情况下运作良好,但在另一种非常类似的情况下却不起作用?

映射类型不是数组类型