需要与Ionic 3表单组配合,无法读取未定义的属性获取

时间:2018-07-29 11:16:19

标签: angular typescript ionic-framework

我刚刚制作了一个注册表单,我曾经在Angular 5中使用过Form-Group,但是在Ionic 3中我遇到了以下错误:

1-无法读取未定义的属性“ get”。

2-错误错误:未捕获(按承诺):错误:formGroup需要一个FormGroup 实例。请传递一个。

   Example:


<div [formGroup]="myGroup">
  <input formControlName="firstName">
</div>

In your class:

this.myGroup = new FormGroup({
   firstName: new FormControl()
});

我的HTML:

<ion-list>
  <form [formGroup]="register" (ngSubmit)="createUser()">
  <ion-item class="form-group" padding>
    <ion-label color="primary" floating>Name</ion-label>
    <ion-input formControlName="name" class="form-control" type="text">
    </ion-input>
  </ion-item>
  <ion-item class="form-group" padding>
    <ion-label color="primary" floating>User Name</ion-label>
    <ion-input formControlName="userName" class="form-control" type="text"> 
    </ion-input>
   </ion-item>
   <ion-item class="form-group" padding>
    <ion-label color="primary" floating>Email</ion-label>
    <ion-input formControlName="email" class="form-control" type="text"> 
    </ion-input>
   </ion-item>
   <ion-item padding class="form-group">
    <ion-label color="primary" floating>Password</ion-label>
    <ion-input formControlName="password" class="form-control" 
    type="password"></ion-input>
    </ion-item>
    <button type="submit" [disabled]="!register.valid" ion-button 
    color="primary" clear icon-start>
    <ion-icon name="contact"></ion-icon> Submit user</button>
  </form>
</ion-list>

我的TS:

import { Validators, FormBuilder, FormGroup } from '@angular/forms';

register: FormGroup;
homePage = HelloIonicPage;
constructor(public navCtrl: NavController, public navParams: NavParams, 
private create: UsersData, private formBuilder: FormBuilder) {
}
ionViewDidLoad() {
this.InitUserForm();
console.log('ionViewDidLoad LoginPage');
}
InitUserForm() {
let EMAIL_REGEXP = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)| 
(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0- 
9]+\.)+[a-zA-Z]{2,}))$/;
this.register = this.formBuilder.group({
  id: [0],
  name: ['', [Validators.required]],
  userName: ['', [Validators.required]],
  email: ['', [Validators.required, Validators.pattern(EMAIL_REGEXP)]],
  password: ['', [Validators.required, Validators.minLength(6)]]
})
}
createUser() {
this.create.createUsers(this.register.value);
}

到目前为止我尝试过的事情:

1-尝试从离子输入切换到普通输入标签。

2-尝试将FormsModule添加到应用模块。

3-我仔细检查了Ionic Forms的文档,并做了他们所说的一切。

我需要知道问题出在哪里,是因为我没有添加ngModel吗?当我在Angular 5中使用formGroup时,我从不使用它。

1 个答案:

答案 0 :(得分:1)

您需要按照以下模式更改 .ts 文件

导入以下软件包:

import { Validators, FormBuilder, FormGroup,FormControl } from '@angular/forms';

然后在班级内部进行更改

private register: FormGroup;
constructor(public navCtrl: NavController, public navParams: NavParams, 
private create: UsersData, private formBuilder: FormBuilder) {
   this.InitUserForm();
}

  InitUserForm() {

    this.register = this.formBuilder.group({
      id: [0],
      name: ['', [Validators.required]],
      userName: ['', [Validators.required]],
      email: ['', [Validators.required, this.emailValidator.bind(this)]],
      password: ['', [Validators.required, Validators.minLength(6)]]
    })
  }

  createUser() {
    console.log(this.register.value);
  this.create.createUsers(this.register.value);
}

  emailValidator(control: FormControl): {[s: string]: boolean} {
    if (!control.value.match("^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$")) {
      return {invalidEmail: true};
    }
  }

My browser look