Ionic2使用FormBuilder和Validators进行表单验证

ionic2中的form表单是验证方式是基于angular2的form验证,在angular2的form经过更新后,从以前的

import { FormBuilder, Control, ControlGroup, Validators, FORM_DIRECTIVES } from '@angular/common';

更新成了从forms中引入

import { FormBuilder, Validators, FormGroup } from '@angular/forms';
变化后 变化前
formGroup ngFormModel
formControl ngFormControl
formControlName ngControl
formGroupName ngControlGroup
formArrayName ngControlGroup
FormControl() Control
FormGroup() ControlGroup
FormArray() ControlArray

并且之前form使用的名字也存在一些变化

变化后 变化前
formGroup ngFormModel
formControl ngFormControl
formControlName ngControl
formGroupName ngControlGroup
formArrayName ngControlGroup
FormControl() Control
FormGroup() ControlGroup
FormArray() ControlArray

具体变化可以参看详情

以下为最新的使用FormBuilder进行表单验证的代码

----login.ts-----

import { TabsPage } from './../tabs/tabs';
import { StorageService } from './../../providers/storage-service';//这里引入了一个自己创建的服务,主要用于存储用户信息
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';

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


@Component({
  selector: 'page-login',
  templateUrl: 'login.html',
  providers: [StorageService]
})
export class LoginPage {

  loginForm: FormGroup;
  username: any;
  password: any;
  constructor(public navCtrl: NavController, private formBuilder: FormBuilder, public storage: StorageService) {
    this.loginForm = formBuilder.group({
      username: ['', Validators.compose([Validators.minLength(11), Validators.maxLength(11), Validators.required, Validators.pattern("^(13[0-9]|15[012356789]|17[03678]|18[0-9]|14[57])[0-9]{8}$")])],
      password: ['', Validators.compose([Validators.required, Validators.minLength(6)])]
    })
    this.username = this.loginForm.controls['username'];
    this.password = this.loginForm.controls['password'];
  }


  login(value) {
    if (value.username == "手机号码" && value.password == 123456) {
      this.storage.setUser(value);
      this.navCtrl.push(TabsPage);
    } else {
      console.log("登录失败");
    }

  }

}

----login.html----

<ion-header>
    <ion-navbar hideBackButton>
        <ion-title>用户登录</ion-title>
    </ion-navbar>
</ion-header>

<ion-content padding>
    <form [formGroup]="loginForm" (ngSubmit)="login(loginForm.value)" novalidate>
        <ion-item [class.error]="!username.valid && username.touched">
            <ion-label>用户名:</ion-label>
            <ion-input type="tel" placeholder="请输入用户名" value="" [formControl]="username" clearInput=true></ion-input>
        </ion-item>
        <div *ngIf="username.hasError('required') && username.touched" class="error-message">* 请输入用户名</div>
        <div *ngIf="(username.hasError('minlength')||username.hasError('maxlength')||username.hasError('pattern')) && username.touched" class="error-message">* 请输入正确的电话号码</div>
        <ion-item>
            <ion-label>密 码:</ion-label>
            <ion-input type="password" placeholder="请输入密码" value="" [formControl]="password" clearInput=true></ion-input>
        </ion-item>
        <div *ngIf="password.hasError('required') && password.touched" class="error-message">* 请输入密码</div>
        <div *ngIf="(password.hasError('minlength')) && password.touched" class="error-message">* 密码长度最少为六位</div>
        <button ion-button block color="secondary" type="submit" [disabled]="!loginForm.valid">登录</button>
    </form>
</ion-content>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HTML表单 在HTML中,表单是 ... 之间元素的集合,它们允许访问者输入文本、选择选项、操作对象等等,然后将...
    兰山小亭阅读 8,695评论 2 14
  • Angular 支持非常强大的内置表单验证,maxlength、minlength、required 以及 pat...
    sunny_lvy阅读 20,116评论 3 25
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,296评论 22 257
  • 当我们打算自定义表单控件前,我们应该先考虑一下以下问题: 是否已经有相同语义的 native (本机) 元素?如:...
    semlinker阅读 5,798评论 1 5
  • 如果话,有哪一个瞬间会让你觉得世界并不是很善良,并不会特别优待你的时候,就是即使一天到头累到貌似要垮下,面目表情的...
    洛奇奇奇奇奇奇阅读 1,293评论 0 0