无法为父级和子级使用OnPush更新最后输入中的元素

时间:2018-11-20 19:32:03

标签: angular angular-reactive-forms angular2-changedetection

stackblitz example

我创建了CustomInputComponent和CustomElementErrorsComponent。
这两个组件都使用OnPush策略。
CustomInput包含标准输入标签和CustomElementErrors。
CustomElementErrors显示表单控件错误。

我在CustomInput内部传递FormGroup和FormControl名称。
(根据设计,我不将formControl作为@Input传递)
(而且我没有实现ControlValueAccessor)

我在CustomInput中实现ngDoCheck以调用markForCheck并在CustomElementErrors中更新视图。
但是,当我单击markAsTouched按钮时,除了最后输入中的错误组件之外,所有的Errors组件都会将“ touched”从false更改为true。
我不明白为什么。选择标记和其他表单元素的情况相同。

我找到了两种解决方案:

  1. 在markAsTouched方法内添加control.updateValueAndValidity()。对于新人来说不是很明显。
  2. 为错误组件添加新的“触摸式”输入参数。 Angular将运行更新。但是我还需要使用markForCheck。 Example with additional @Input


所以我有两个问题:

  1. 为什么不起作用?
  2. 是在父母及其子女中使用OnPush的另一种方式吗?


我也读过这个answer

谢谢。

0 个答案:

没有答案