在反应形式上设置错误时,更改检测无法运行

时间:2019-03-26 04:44:19

标签: angular angular7 angular-reactive-forms

我使用的是角度7,我正在为其中一种表格使用反应式表格,代码如下。 (Stackblitz Here

模板

 <form [formGroup]="SignupForm" *ngIf="SignupForm">
   <input type="text" class="form-control" id="username" formControlName = "username">
   <div *ngIf="SignupForm.errors?.errors">Error</div>
 </form>

打字稿

export class AppComponent implements OnInit {
  SignupForm: FormGroup;

  constructor() {

  }

  ngOnInit() {
    setTimeout(() => {
      this.SignupForm = new FormGroup({
        'username': new FormControl('Value'),
        'email': new FormControl()
      });
      this.SignupForm.setErrors({errors: 'Error'});
    })
  }
}

您可以看到,表单初始化后,我正在尝试设置错误(在我的实际情况下,我将基于后端数据进行一些验证,然后执行此操作。)。但是即使将SignupForm.errors设置了错误对象,该错误似乎也没有出现。

但如果我这样做

setTimeout(() => { this.SignupForm.setErrors({errors: 'Error'});}) 

一切正常。我是在做错什么还是我可以报告的有角度的错误。请帮忙。谢谢。

注意

实际上,我的表单来自异步的后端。从元数据创建表单后,我进行验证并设置错误。因此,转移到任何生命周期挂钩都不会改变我的任何行为。

1 个答案:

答案 0 :(得分:0)

能否在 ngAfterViewInit

上写 setErrors

这是示例 TS

export class AppComponent implements OnInit {
SignupForm: FormGroup;

constructor() {
}

ngOnInit() {
   this.SignupForm = new FormGroup({
     'username': new FormControl('Value'),
    'email': new FormControl()
  });
}

ngAfterViewInit(){
     this.SignupForm.setErrors({errors: 'Error'});
}

让我知道它是否有效。