EXCEPTION: Uncaught (in promise): TypeError: Cannot read property 'touched' of null
EXCEPTION: Uncaught (in promise): TypeError: Cannot read property 'touched' of null
我正在尝试在我的 Angular2 应用程序中使用 Reactive 表单,但我 运行 出现如下异常
EXCEPTION: Uncaught (in promise): TypeError: Cannot read property
'touched' of null TypeError: Cannot read property 'touched' of null
我的示例代码如下
import { Component, OnInit } from '@angular/core';
import { NgForm } from '@angular/forms';
import {FormGroup, FormControl} from '@angular/forms';
import { Customer } from './customer';
@Component({
moduleId:module.id,
templateUrl: 'sign-up.reactiveForms.html'
})
export class SignupComponent {
customer: Customer= new Customer();
customerForm : FormGroup; //it assosciate html element with this root model
ngOnInit() : void {
this.customerForm=new FormGroup({
firstName: new FormControl(),
lastName: new FormControl(),
email: new FormControl(),
sendCatalog: new FormControl(true)
});
}
save() {
console.log(this.customerForm);
}
}
sign-up.reactiveForms.html文件如下
<!-- First Name input -->
<div class="form-group"
[ngClass]="{'has-error': (customerForm.get('firstName').touched ||customerForm.get('firstName').dirty) && !customerForm.get('firstName').valid }">
<label class="col-md-2 control-label"
for="firstNameId">First Name</label>
<div class="col-md-8">
<input class="form-control"
id="firstNameId"
type="text"
placeholder="First Name (required)"
required
minlength="3"
formControlName="firstName"
/>
<span class="help-block" *ngIf="(customerForm.get('firstName').touched || customerForm.get('firstName').dirty) && customerForm.get('firstName').errors">
<span *ngIf="customerForm.get('firstName').errors.required">
Please enter your first name.
</span>
<span *ngIf="customerForm.get('firstName').errors.minlength">
The first name must be longer than 3 characters.
</span>
</span>
</div>
</div>
我想弄明白为什么 touched 属性 是空的。
尝试并初始化您的表单控件,这样它们就不会 null
:
this.customerForm=new FormGroup({
firstName: new FormControl(''),
lastName: new FormControl(''),
email: new FormControl(''),
sendCatalog: new FormControl(true)
});
否则使用安全导航运算符可能会消除空错误,例如:
customerForm.get('firstName')?.touched
但是单独初始化表单控件应该(希望)解决这个问题。
我正在尝试在我的 Angular2 应用程序中使用 Reactive 表单,但我 运行 出现如下异常
EXCEPTION: Uncaught (in promise): TypeError: Cannot read property 'touched' of null TypeError: Cannot read property 'touched' of null
我的示例代码如下
import { Component, OnInit } from '@angular/core';
import { NgForm } from '@angular/forms';
import {FormGroup, FormControl} from '@angular/forms';
import { Customer } from './customer';
@Component({
moduleId:module.id,
templateUrl: 'sign-up.reactiveForms.html'
})
export class SignupComponent {
customer: Customer= new Customer();
customerForm : FormGroup; //it assosciate html element with this root model
ngOnInit() : void {
this.customerForm=new FormGroup({
firstName: new FormControl(),
lastName: new FormControl(),
email: new FormControl(),
sendCatalog: new FormControl(true)
});
}
save() {
console.log(this.customerForm);
}
}
sign-up.reactiveForms.html文件如下
<!-- First Name input -->
<div class="form-group"
[ngClass]="{'has-error': (customerForm.get('firstName').touched ||customerForm.get('firstName').dirty) && !customerForm.get('firstName').valid }">
<label class="col-md-2 control-label"
for="firstNameId">First Name</label>
<div class="col-md-8">
<input class="form-control"
id="firstNameId"
type="text"
placeholder="First Name (required)"
required
minlength="3"
formControlName="firstName"
/>
<span class="help-block" *ngIf="(customerForm.get('firstName').touched || customerForm.get('firstName').dirty) && customerForm.get('firstName').errors">
<span *ngIf="customerForm.get('firstName').errors.required">
Please enter your first name.
</span>
<span *ngIf="customerForm.get('firstName').errors.minlength">
The first name must be longer than 3 characters.
</span>
</span>
</div>
</div>
我想弄明白为什么 touched 属性 是空的。
尝试并初始化您的表单控件,这样它们就不会 null
:
this.customerForm=new FormGroup({
firstName: new FormControl(''),
lastName: new FormControl(''),
email: new FormControl(''),
sendCatalog: new FormControl(true)
});
否则使用安全导航运算符可能会消除空错误,例如:
customerForm.get('firstName')?.touched
但是单独初始化表单控件应该(希望)解决这个问题。