所以我有一个格式值访问器指令:
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));
它是在AFTER ngModel之后创建的,因此不会传递给它,因此,当我实际编辑输入时,它是被调用的默认值访问器。我想念什么?
编辑:我发现的一件事:如果我不是扩展DefaultValueAccessor,而是从头开始重新实现ControlValueAccessor,它将起作用。它是angular2模板编译器中的错误吗?
它是angular2模板编译器中的错误吗?
是的,github中已经存在多个问题:
https://github.com/angular/angular/issues/9146#issuecomment-230410616
装饰器似乎无法覆盖angular2-class的元数据。
与该元数据错误有关的更多问题:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句