【问题标题】:Custom Value Accessor in Angular2Angular2中的自定义值访问器
【发布时间】:2016-11-14 11:42:34
【问题描述】:

所以我有一个格式化值访问器指令:

const CUSTOM_VALUE_ACCESSOR = new Provider(
    NG_VALUE_ACCESSOR, { useExisting: forwardRef(() => NumbersValueAccessor), multi: true });

@Directive({
    selector: 'input[format]',
    host: { '(input)': 'onMyChange($event.target.value)' },
    providers: [CUSTOM_VALUE_ACCESSOR]
})  
export class NumbersValueAccessor extends DefaultValueAccessor {
//...
}

然后我像使用它

@Component({
    templateUrl: 'frequencyPage.html'
    , moduleId: module.id
    , directives: [/*...*/ NumbersValueAccessor]
})
export class FrequencyPage //...

在 html 中作为

  <input  format="{number:true}" [(ngModel)]="test.alpha"/>

它被实例化了,但是查看角度 JIT 编译的模板代码:

  self._DefaultValueAccessor_32_3 = new jit_DefaultValueAccessor3(self.renderer,new jit_ElementRef18(self._el_32));
  self._Token_NgValueAccessor_32_4 = [
    self._DefaultValueAccessor_32_3,
    self._DefaultValueAccessor_32_3
  ]
  ;
  self._NgModel_32_5 = new jit_NgModel5(null,null,null,self._Token_NgValueAccessor_32_4);
  self._NgControl_32_6 = self._NgModel_32_5;
  self._NgControlStatus_32_7 = new jit_NgControlStatus7(self._NgControl_32_6);
  self._NumbersValueAccessor_32_8 = new jit_NumbersValueAccessor8(self.renderer,new jit_ElementRef18(self._el_32));

它是在 ngModel 之后创建的,因此不会传递给它,因此当我实际编辑输入时,它是被调用的默认值访问器。 我错过了什么?


编辑: 我发现一件事:如果我不扩展 DefaultValueAccessor,而是从头开始重新实现 ControlValueAccessor,它就可以工作。 是不是 angular2 的模板编译器的 bug?

【问题讨论】:

    标签: angular angular2-forms


    【解决方案1】:

    是不是angular2的模板编译器的bug?

    是的,github中已经有多个issue了:

    https://github.com/angular/angular/issues/9146#issuecomment-230410616

    装饰器似乎无法覆盖 angular2-classes 的元数据。


    与此元数据错误相关的更多问题:

    https://github.com/angular/angular/issues/9758

    https://github.com/angular/angular/issues/8925

    【讨论】:

    • 好吧,有了一个简单的解决方法和 github 上存在的问题,我的工作就完成了 :)
    猜你喜欢
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多