![](/img/trans.png)
[英]Getting error on Angular app: TypeError: Cannot read property 'then' of undefined
[英]Getting 'TypeError: Cannot read property 'errors' of undefined' in my Angular Form
我想要一個 Reactive 表單來創建客戶端,但是,當我為我的應用程序提供服務時,我在控制台中收到此錯誤:
TypeError: Cannot read property 'errors' of undefined
它指向這個塊的第一個<li>
元素:
<ul class="help-block">
<li *ngIf="form.controls.email.errors?.required && form.controls.email.dirty">Required</li>
<li *ngIf="(form.controls.email.errors?.minlength || form.controls.email.errors?.maxlength) && form.controls.email.dirty">Minimum chars: 5, maximum 35</li>
</ul>
完整形式代碼:
<form style="border:1px solid" [formGroup]="form"
(submit)="onRelatieSubmit()">
<h4> New client </h4>
<div class="form-group">
<label for="company">Company</label>
<div class="col-5">
<input [ngClass]="{'is-invalid': (form.controls.company.errors &&
form.controls.company.dirty),
'is-valid': !form.controls.company.errors}" class="form-control" type="text" name="company" (autocomplete)="off" placeholder="Name" formControlName="company" (blur)="checkUsername()"/>
<ul class="help-block">
<li *ngIf="form.controls.company.errors?.required && form.controls.company.dirty">Required</li>
<li *ngIf="(form.controls.company.errors?.minlength || form.controls.company.errors?.maxlength) && form.controls.company.dirty">Minimum chars: 5, maximum 25</li>
</ul>
</div>
</div>
<div class="form-group">
<label for="addressLineOne">Address</label>
<div class="col-5">
<input [ngClass]="{'is-invalid': (form.controls.addressLineOne.errors && form.controls.addressLineOne.dirty) ,
'is-valid': !form.controls.addressLineOne.errors}" id="addressLineOne" class="form-control" type="text" name="addressLineOne" (autocomplete)="off" placeholder="Address" formControlName="addressLineOne" (blur)="checkEmail()"/>
<ul class="help-block">
<li *ngIf="form.controls.addressLineOne.errors?.required && form.controls.addressLineOne.dirty">Requiredt</li>
</ul>
</div>
</div>
<div class="form-group">
<label for="city">City</label>
<div class="col-5">
<input [ngClass]="{'is-invalid': (form.controls.city.errors && form.controls.city.dirty), 'is-valid': !form.controls.city.errors}" id="city" class="form-control" type="text" name="city" (autocomplete)="off" placeholder="City" formControlName="city"/>
<ul class="help-block">
<li *ngIf="form.controls.city.errors?.required && form.controls.city.dirty">Requiredt</li>
</ul>
</div>
</div>
</div>
<div class="form-group">
<label for="email">Email</label>
<div class="col-5">
<input [ngClass]="{'is-invalid': (form.controls.email.errors && form.controls.email.dirty),
'is-valid': !form.controls.email.errors}" id="email" class="form-control" type="text" name="email" (autocomplete)="off" placeholder="Email" formControlName="email"/>
<ul class="help-block">
<li *ngIf="form.controls.email.errors?.required && form.controls.email.dirty">Required</li>
<li *ngIf="(form.controls.email.errors?.minlength || form.controls.email.errors?.maxlength) && form.controls.email.dirty">Minimum chars: 5, maximum 35</li>
</ul>
</div>
</div>
<div class="form-group">
<label for="country">Country</label>
<div class="col-5">
<input [ngClass]="{'is-invalid': (form.controls.country.errors && form.controls.country.dirty) , 'is-valid': !form.controls.country.errors}" id="country" class="form-control" type="text" name="country" (autocomplete)="off" placeholder="Country" formControlName="country"/>
<ul class="help-block">
<li *ngIf="form.controls.country.errors?.required && form.controls.country.dirty">Required</li></ul>
</div>
</div>
<div class="form-group">
<label for="postalCode">Postal code</label>
<div class="col-5">
<input [ngClass]="{'is-invalid': (form.controls.postalCode.errors && form.controls.postalCode.dirty) , 'is-valid': !form.controls.postalCode.errors}" id="postalCode" class="form-control" type="text" name="postalCode" (autocomplete)="off" placeholder="Postal Code" formControlName="postalCode"/>
<ul class="help-block">
<li *ngIf="form.controls.postalCode.errors?.required && form.controls.postalCode.dirty">Required</li></ul>
</div>
</div>
<div class="form-group">
<label for="phone">Phone</label>
<div class="col-5">
<input [ngClass]="{'is-invalid': (form.controls.phone.errors && form.controls.phone.dirty), 'is-valid': !form.controls.phone.errors}" id="phone" class="form-control" type="text" name="phone" (autocomplete)="off" placeholder="Aantal kilometers" formControlName="phone"/>
<ul class="help-block">
<li *ngIf="form.controls.phone.errors?.required && form.controls.phone.dirty">Required</li></ul>
</div>
</div>
<input [disabled]="!form.valid || processing" type="submit" class="btn btn-primary" value="Submit" />
</form>
這是我在 `client.component.ts' 中的 CreateForm 函數
createForm() {
this.form = this.formBuilder.group(
{
company: ['', Validators.compose([
Validators.required,
Validators.minLength(5),
Validators.maxLength(35),
])],
addressLineOne: ['', Validators.compose([
Validators.required,
Validators.minLength(3),
Validators.maxLength(35),
])],
city: ['', Validators.compose([
Validators.required,
Validators.minLength(8),
Validators.maxLength(35),
])],
country: ['', Validators.compose([
Validators.required,
Validators.minLength(3),
Validators.maxLength(35),
])],
postalCode: ['', Validators.compose([
Validators.required,
Validators.minLength(3),
Validators.maxLength(35),
])],
phone: ['', Validators.compose([
Validators.required,
Validators.minLength(3),
Validators.maxLength(35),
])],
email: ['', Validators.compose([
Validators.required,
Validators.minLength(3),
Validators.maxLength(35),
])],
}
)
}
為什么說電子郵件未定義? 我不明白,我已經在 formbuilder.group 中聲明了如果您需要更多信息,請告訴我
In.ts寫
get addressLineOne() {
return this.form.get('addressLineOne');
}
在 html 中:
<ul class="help-block">
<li *ngIf="addressLineOne.errors?.required && addressLineOne.dirty">Requiredt</li>
</ul>
嘗試此操作以查看錯誤是否不再存在並且表單是否呈現:
<ul class="help-block" *ngIf="form.controls.email">
<li *ngIf="form.controls.email.errors?.required && form.controls.email.dirty">Required</li>
<li *ngIf="(form.controls.email.errors?.minlength || form.controls.email.errors?.maxlength) && form.controls.email.dirty">Minimum chars: 5, maximum 35</li>
</ul>
您可以嘗試其他方法,而不是手動將所有錯誤消息添加到您的 html,這可能有助於解決問題,因為它涵蓋了所有可能的錯誤並從 html 進行更有組織的調用。
(這只是一個示例代碼,所以請根據您的要求進行修改)
在 your.component 文件中添加一個新屬性並為所有要求添加消息。 重要的部分,如果要求的數量和消息(以及類型的名稱)應該匹配。
validation_messages = {
'name': [
{ type: 'required', message: 'Name is required.' }
],
'email': [
{ type: 'required', message: 'Email is required.' },
{ type: 'email', message: 'Please enter a valid email.' }
],
'password': [
{ type: 'required', message: 'Password is required.' },
{ type: 'minlength', message: 'Password must be at least 5 characters long.' },
{ type: 'pattern', message: 'Your password must contain at least one uppercase, one lowercase, and one number.' }
};
在每個輸入塊之后的 html 文件中:
(在這個例子中 [formGroup]="validations_form")
<div class="validation-errors">
<ng-container *ngFor="let validation of validation_messages.name">
<div class="error-message"
*ngIf="validations_form.get('name').hasError(validation.type)
&& (validations_form.get('name').dirty
|| validations_form.get('name').touched)">
{{ validation.message }}
</div>
</ng-container>
</div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.