Type casting within a template in Angular 2

后端 未结 3 1744
春和景丽
春和景丽 2020-12-15 16:43

I\'m working on an Angular project (Angular 4.0.0) and I\'m having trouble binding a property of an abstract class to ngModel because I first need to cast it as the concrete

3条回答
  •  自闭症患者
    2020-12-15 17:19

    As mentioned, using a barebone method call will have performance impact.

    A better approach is to use a pipe, and you have best of both worlds. Just define a Cast pipe:

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

    and then in your template, use event | cast when you need the cast.

    That way, change detection stays efficient, and typing is safe (given the requested type change is sound of course).

    Unfortunately, I don't see a way to have this generic because of the name attribute, so you'd have to define a new pipe for each type.

提交回复
热议问题