我有这个实现FormBuilder
的表单。
我需要在输入字段下显示我的自定义验证消息。使用下面的代码,只要输入字段为空,验证器就会显示红色的“错误”文本,但不显示我的自定义验证。
请参阅下面的代码.html
和.ts
<form [formGroup]="subscriptionForm">
<h3 style="color: gray; text-align: center;">Registration</h3>
<div class="row">
<div class="col-md-6">
<div class="md-form">
<i class="fa fa-user prefix grey-text"></i>
<input type="text" formControlName="UserName" name='UserName' id="UserName" class="form-control" mdbInputDirective>
<label for="UserName">Your UserName</label>
<div *ngIf="UserName?.invalid && (UserName?.dirty || UserName?.touched)" class="alert alert-danger">
<div *ngIf="UserName?.errors.required">
Username is required.
</div>
</div>
</div>
</div>
</div>
</form>
constructor(private fb: FormBuilder) { }
ngOnInit() {
this.subscriptionForm = this.fb.group({
UserName: [null, Validators.required],
});
}
我已经浏览了Angular - Form验证文档,这是我获取代码的地方,但我无法做到正确。谢谢。
答案 0 :(得分:2)
尝试更改
*ngIf="UserName?.invalid && (UserName?.dirty || UserName?.touched)"
要
*ngIf="subscriptionForm.get('UserName').hasError('required') && subscriptionForm.get('UserName').touched"
在视图中:
<div *ngIf="subscriptionForm.get('UserName').hasError('required') && subscriptionForm.get('UserName').touched" class="alert alert-danger">
Username is required.
</div>
请试试这个演示:
https://stackblitz.com/edit/angular-5xtbxm?file=app/app.component.html
答案 1 :(得分:0)
在您的视图中使用subscriptionForm.controls.UserName
代替UserName
答案 2 :(得分:0)
问题是您缺少文档中的getter方法,例如:
get name() { return this.heroForm.get('name'); }
get power() { return this.heroForm.get('power'); }
现在,当他们在模板中访问name
时,他们实际访问了this.heroForm.get('name')
所以您需要在*ngIf
中检查:
subscriptionForm.get('UserName').errors.required
答案 3 :(得分:0)
要访问表单的模型,您需要使用CMD ["python", "manage.py", "runserver", "0.0.0.0:80"]
。为了使其正常工作,我会将模型中的初始值设置为空字符串而不是subscriptionForm.get('UserName')
:
null