设置值的方法和更新表单控件的有效性

uks*_*ksz 4 angular2-forms angular

我想知道是否有任何方法来设置值并更新表单控件的有效性.鉴于以下内容:

this.updateForm = this._formBuilder.group({
    user: ['',Validators.required]     
});
Run Code Online (Sandbox Code Playgroud)

我有一些关于更改触发器的指令,触发以下内容:

changeUserSelection(value){
    this.updateForm.controls['user'].value = value // doesnt trigger validation?
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何设置值,并触发此字段的验证.按照我的方式这样做,不会触发验证.

谢谢

Par*_*ain 8

更新Angular2决赛

根据angular2的最终版本 updateValue已更改为,setValue 所以新语法应该是这样的

changeUserSelection(value){
  this.updateForm.controls['user'].setValue(value);
}
Run Code Online (Sandbox Code Playgroud)

  • 另请注意,`setValue`不会更新控件的原始状态.需要明确调用`markAsDirty`. (7认同)
  • 有时需要“markAsTouched()”。使用 Angular 材质和默认的 ErrorMatcher - 控件在被“触摸”之前不会显示其错误消息。它实际上并不需要是“脏的”。 (2认同)

Val*_*ous 7

对我来说setValuepatchValue没有自己完成这项工作。我为触发验证所做的操作如下:

form.controls[field].setValue(value);
form.controls[field].markAsTouched();
form.controls[field].markAsDirty();
form.controls[field].updateValueAndValidity();
Run Code Online (Sandbox Code Playgroud)

这样我的验证消息就可以正确触发。我尝试过没有,updateValueAndValidity但没有成功。


Thi*_*ier 4

您应该改用该updateValue方法:

changeUserSelection(value){
  this.updateForm.controls['user'].updateValue(value);
}
Run Code Online (Sandbox Code Playgroud)