我目前有一个指令,我将放置在 <input>
元素上,将文本格式化为大写,货币等等 . 作为用户类型 . 这一切都可以通过实现ControlValueAccessor来实现,但是在 writeValue
方法执行后控件有效性状态不会更新 .
有没有办法强制输入的ngModel中的 FormControl
进行验证,或者有没有办法将 NgModel
/ FormControl
实例注入放在同一输入的指令中?每当我尝试注入它时,我都会遇到循环依赖性错误 . 我正在尝试在 NgModel
实例的控件属性上使用 updateValueAndValidity()
方法来更新状态,但这也可能是错误的 .
如果还有更好的方法来解决这个问题,那么我也愿意接受建议 . 基本上试图从使用 $formatters
和 $parsers
并需要 ngModel
实例的Angular 1.x转换指令...
如果您希望查看特定代码的代码片段,请与我们联系 .
2 回答
听起来像updateValueAndValidity是你想要的 .
Angular 2 AbstractControl class,这是FormControl的超级,有这个方法将强制检查控件的有效性状态 .
您可以以一种角度形式访问特定的formControl,形成类型为formControl的' of type formGroup, a contained ' controlGroup ' of type formGroup, and a specific ' control' . 我通过
form.controls['controlGroup'].controls.['control'].<method>
访问它的方法对于使用
ControlValueAccessor
实现指令并且具有相同问题的任何人,我能够通过在writeValue()
方法期间调用onTouched()
方法(通过registerOnTouched()
方法设置的方法)来更新验证状态 .我的指令更新了
writeValue()
中的ElementRef.nativeElement.value
属性,然后调用onChange()
和onTouched()
来获取传播到模型的值,以及更新验证状态 .