首页 文章

如何从Angular 2中的指令访问NgModel

提问于
浏览
1

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

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

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

如果您希望查看特定代码的代码片段,请与我们联系 .

2 回答

  • 0

    听起来像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> 访问它的方法

  • 1

    对于使用 ControlValueAccessor 实现指令并且具有相同问题的任何人,我能够通过在 writeValue() 方法期间调用 onTouched() 方法(通过 registerOnTouched() 方法设置的方法)来更新验证状态 .

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

相关问题