模板驱动方法:以角2的形式向输入字段动态添加所需的属性。但是角形验证(form.valid)不能识别动态添加的所需字段。
<input type="text" [(ngModel)]="coumnName" name="coumnName" >
添加动态需要的:
document.getElementsByName(columnName)[0].setAttribute('required', '');
发布于 2018-02-07 18:08:01
您可以使用与以反应性形式动态为FormControl
设置验证器相同的技术,但可以使用NgForm
指令。怎么会这样?对于NgForm
指令,它实际上是如何创建注册到您在表单中分配的name
的FormControl
实例的。
因此,您可以做的是导入NgForm
、Validators
和ViewChild
来引用表单,并能够在组件中使用它。另外,我看到您的ngModel
变量与name
属性相同。那是行不通的,它们必须是独一无二的。
以下几点也是如此:
<form #f="ngForm">
<input [(ngModel)]="coumnNameModel" name="coumnName" #coumnName="ngModel">
</form>
在组件中,导入NgForm
和ViewChild
,然后使用setValidators()
并设置所需的验证器,然后调用updateValueAndValidity()
@ViewChild('f') myForm: NgForm;
// when you want to set required validator:
setRequired() {
this.myForm.form.get('coumnName').setValidators([Validators.required])
this.myForm.form.get('coumnName').updateValueAndValidity();
}
发布于 2018-02-06 15:58:21
事实上,一旦开始数据绑定,就不再使用HTML属性了。您没有设置属性。您正在设置DOM元素、组件和指令的属性。
你可以读到这个官方医生
发布于 2019-01-08 15:46:34
只需加上:
[required]="isConditionIsTrue"
在你的输入中。
您可以使用条件或布尔值。
注意:如果您正在使用formControls,则应该使用d:
添加所需控件或任何其他控件:
this.form.addControl('formControlName', new FormControl(ValueToSet, Validators.required));
如果您想要删除所需的控件或任何其他控件:
this.form.get('formControlName').reset();
this.form.removeControl('formControlName');
https://stackoverflow.com/questions/48645671
复制相似问题