angular2 form + async validation + ChangeDetectionStrategy.OnPush =没有视图刷新?

时间:2016-07-20 15:20:01

标签: angular angular2-forms

[angular2 RC4 + @ angular / forms module]

我有一个使用包含OnPush的{​​{1}}更改检测的组件。 此表单包含FormGroupFormControl验证程序。

验证完成后(不再async),视图不刷新。 只有pending模糊事件才会使视图刷新..

如果我删除了input更改检测,则它可以正常工作。

This plunker demonstrates it

这是一个有角色的错误还是我做错了什么?

1 个答案:

答案 0 :(得分:6)

您似乎错过了使用ChangeDetectionStrategy.OnPush的目标。

您的组件上没有@Input属性或| async管道,但只有使用此策略更新视图状态 - 当Input属性更新时(理想情况下使用新对象) )。因此,只需摆脱当前案例

<强>更新

如果你仍然坚持在这种情况下使用OnPush,对于预期的行为,你应该手动触发变化检测。

添加import {..., ChangeDetectorRef} from '@angular/core';并在构造函数中注入它的实例。

在你的方法中,你必须添加:

 uniqueNameAsync(control: FormControl): Promise<{[key: string]:any}>{
   return new Promise(resolve => {
       setTimeout(() =>{
            resolve(null);
            this.changeRef.markForCheck();
      }, 500);
   });
 }