当使用Angular2模板驱动的形式,我们可以使用#firstName="ngModel"
,然后验证逻辑,我们可以使用firsName
这样<div class="alert alert-danger" *ngIf="firstName.errors.minlength">
角2反应形式详细验证
我想类似的东西,但有反应形式。以下代码正在工作,但它太冗长且容易出错:
<input id="username"
type="text"
class="form-control"
[formControl]="form.controls['username']">
<div *ngIf="form.controls['username'].touched && form.controls['username'].errors">
<div class="alert alert-danger" *ngIf="form.controls['username'].hasError('required')">
Username is required
</div>
<div class="alert alert-danger" *ngIf="form.controls['username'].hasError('minlength')">
Username should have at least {{form.controls['username'].errors.minlength.requiredLength}} characters
</div>
<div class="alert alert-danger" *ngIf="form.controls['username'].hasError('cannotContainSpace')">
Username should not contain spaces
</div>
</div>
以上是组件模板的一部分。 form.controls['username']
出现在太多的地方。有什么办法可以简化吗?我试图声明一个局部变量,如#userName='"form.controls['username']"
,但它不起作用。
- 更新 -
该组件在它自己的.ts文件中定义与FormGroup:
export class TestFormComponent implements OnInit
{
form: FormGroup;
constructor(private fb: FormBuilder)
{
}
ngOnInit()
{
this.form = this.fb.group({
'username': ['',
Validators.compose([
Validators.required,
Validators.minLength(3),
UsernameValidators.cannotContainSpace]),
UsernameValidators.shouldBeUnique],
'password': ['', Validators.required]
});
}
您可以在组件定义一个变量背后认为'FormControl' –
@HarryNinh语法是什么?我尝试了'#variable =“formControl”'但我得到这个错误'没有指令将“exportAs”设置为“formControl”(“ type =”text“ class =”form-control“ [ERROR - > ]#control =“formControl” [formControl] =“form.controls ['username']”> – RBasniak
你在哪里定义了你的'form'? –