您好我正在使用表单构建器
在角度2中实现表单在component.ts中,我使用formGroup
实现了我的表单以下是我的代码
public myForm: FormGroup;
constructor(private authenticateservice: AuthenticateService,
private _fb: FormBuilder
) {
}
ngOnInit() {
this.myForm = this._fb.group({
address: [this.userDetails.address, [<any>Validators.required]],
address2: ['', [<any>Validators.required]],
city: ['', [<any>Validators.required]],
company_address: ['', [<any>Validators.required]],
company_address2: ['', [<any>Validators.required]],
company_city: ['', [<any>Validators.required]],
company_country: ['', [<any>Validators.required]],
company: ['', [<any>Validators.required , Validators.minLength(3)] ],
company_tax_number: ['', [<any>Validators.required]],
company_zip: ['', [<any>Validators.required, Validators.minLength(5) , Validators.maxLength(7)]],
country: ['', [<any>Validators.required]],
email: ['', [<any>Validators.required, Validators.email]],
first_name: [this.userDetails.first_name, [<any>Validators.required]],
id: ['', [<any>Validators.required]],
last_name: ['', [<any>Validators.required]],
phone: ['', [<any>Validators.required, Validators.minLength(10)]],
zip: ['', [<any>Validators.required , Validators.minLength(5) , Validators.maxLength(7)]],
user_type: ['2', [<any>Validators.required]],
terms: [0, [<any>Validators.required]],
hash_tag: [''],
});
}
工作正常。但是在frontEnd中显示验证时
我喜欢这个
<div class="form-group row">
<div class="col-lg-8">
<label>Address 2</label>
<textarea class="form-control" placeholder="Address" rows="2" [readonly]="disabled" id="companyaddress2" formControlName="company_address2"></textarea>
<span class="help-block form-error text-danger small" *ngIf="myForm.controls['company_address2'].hasError('required')">Company Address 2 is Required.</span>
</div>
</div>
它正在工作,但在控制台中抛出错误,如下面
错误类型错误:无法读取未定义的属性'hasError'
请帮我解决这个问题。
谢谢。
答案 0 :(得分:13)
您应该像这样使用它:
<span class="help-block form-error text-danger small"
*ngIf="myForm.controls['company_address2'].errors?.required &&
myForm.controls['company_address2'].touched">Company Address 2 is Required </span>
答案 1 :(得分:2)
如果您正在使用反应性表单,则应该可能使用TypeScript getter来解决此问题,这会更清洁:
在反应形式中,您始终可以通过以下方式访问任何表单控件 其父组上的get方法,但有时定义它很有用 吸气剂作为模板的简写。
getter将允许您直接访问表单字段,避免在上面的示例中将myForm.controls['fieldNameGoesHere'].
与ngIf重复使用。
例如,对于company_address2
,请在您的ngOnInit()
方法之后添加以下内容:
get company_address2() { return this.myForm.get( 'company_address2' ); }
这将使您的组件HTML直接访问company_address2
,请尝试尝试:
<textarea class="form-control" placeholder="Address" rows="2" [readonly]="disabled" id="companyaddress2"
formControlName="company_address2">
</textarea>
<span class="help-block form-error text-danger small"
*ngIf="company_address2.hasError('required')">
Company Address 2 is Required.
</span>
尽管您将分别定义每个getter方法,但TypeScript不允许将变量提供给getter,因此您最终将为表单中的每个控件只有一个get方法。
更多信息可以在Angular文档的Form Validation: Built-in Validators下找到。
答案 2 :(得分:1)
对于必需的错误消息,这一行应该起作用
<mat-error>Title is required</mat-error>
答案 3 :(得分:0)
我在角度5遇到这个问题尝试下面的一个你将得到输出
<mat-error>
<span class="help-block form-error text-danger small"
*ngIf="myForm.controls['company_address2'].errors?.required &&
myForm.controls['company_address2'].touched">Company Address 2 is Required </span>
</mat-error>
答案 4 :(得分:0)
我这样解决了这个问题:
<span class="help-block form-error text-danger small"
*ngIf="myForm.controls.company_address2.errors?.required &&
myForm.controls.company_address2.touched">
Company Address 2 is Required </span>