如何从Angular 2 +

时间:2017-02-07 14:53:51

标签: angular

我目前有一个指令,我将<input>元素置于一个将文本格式化为大写,货币等的元素。作为用户类型。通过实现ControlValueAccessor,这一切都很有效,但在writeValue方法执行后,控件有效性状态不会更新。

有没有办法强制输入的ngModel中的FormControl进行验证,或者有没有办法将NgModel / FormControl实例注入放置的指令中在相同的输入?每当我尝试注入它时,我都会遇到循环依赖性错误。我正在尝试在updateValueAndValidity()实例的控件属性上使用NgModel方法来更新状态,但这也可能是错误的。

如果还有更好的方法来解决这个问题,那么我也愿意接受建议。基本上尝试翻译使用$formatters$parsers并需要ngModel实例的Angular 1.x的指令......

如果您希望查看特定内容的代码段,请告诉我。

2 个答案:

答案 0 :(得分:1)

听起来像updateValueAndValidity就是你想要的 Angular 2 AbstractControl class,这是FormControl的超级,它有这个方法,它将强制检查控件的有效性状态。

您可以以角度不喜欢的方式访问特定的formControl。作为参考,我有一个总体的形式&#39; formGroup类型,包含&#39; controlGroup&#39;类型为formGroup,以及一个特定的控件&#39; formControl类型。我通过form.controls['controlGroup'].controls.['control'].<method>

访问其方法

答案 1 :(得分:0)

对于使用ControlValueAccessor实现指令且遇到同样问题的任何人,我可以通过调用onTouched()方法(通过{{1设置的方法)来获取更新验证状态} {方法)在registerOnTouched()方法中。

我的指令更新writeValue()中的ElementRef.nativeElement.value属性,然后调用writeValue()onChange()以获取传播到模型的值,并更新验证状态