angular2 表单 + 异步验证 + ChangeDetectionStrategy.OnPush = 没有视图刷新?

angular2 form + async validation + ChangeDetectionStrategy.OnPush = no view refresh?

[angular2 RC4 + @angular/forms模块]

我有一个组件使用 OnPush 包含 FormGroup 的变化检测。 此表单包含一个 FormControl 和一个 async 验证器。

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

如果我删除 OnPush 更改检测,它会正常工作。

This plunker demonstrates it.

是 angular 错误还是我做错了什么?

看来您没有实现使用 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);
   });
 }