在ionic/cordova中使用Form模型验证(w5cValidator)

在构建ionic项目过程中,当我们创建一个类似表单提交的页面时,可能会对用户的输入内容做某些规则验证,通过后再执行提交处理。

在验证的过程中,为了提供较好的用户体验,可能希望有类似于jquery Validate之类的插件来实现优美的验证以及提示。

w5cValidator基于angular原有的表单验证,在原有的基础上扩展了一些错误提示的功能,让大家不用在每个表单上写一些提示信息的模板,专心的去实现业务逻辑。

怎样在ionic项目中使用它,下面来看看:

Stpe1:创建一个项目(此处使用的是tab类型的项目,创建方式可参照我前一篇如何离线创建Ionic1项目

Stpe2:修改项目信息

打开[config.xml]修改id,name,如下图内容:

Stpe3:引入w5cValidator

下载w5cValidator相关文件,包含w5cValidator.js与w5cValidator.css;这里没有使用w5cValidator原生的样式,因为原声样式是适用于网页版bootstrap的,所以我提供了我修改的样式,以适用于ionicUI。

文件下载地址:http://pan.baidu.com/s/1slgu7fB

下载后将以下两个文件拷贝到指定目录

将w5cValidator.css,拷贝到www\css目录

将w5cValidator.js拷贝到www\s目录

打开项目www\index.html,引入w5cvalidator的引用

<link href="css/w5cValidator.css" rel="stylesheet">
<script src="js/w5cValidator.js"></script>

 

打开www\js\app.js,将'w5c.validator'加到module引用中。

在app.config事件中添加配置全局属性和显示规则,将一下代码拷贝粘贴到app.js文件中,位置如图:

代码如下:

.config(["w5cValidatorProvider", function (w5cValidatorProvider) {

  // 全局配置
  w5cValidatorProvider.config({
    blurTrig   : true,  //光标移除元素后是否验证并显示错误提示信息
    showError  : showError,  //可以是bool和function,这里使用我们自定义的错误显示方式。
    removeError: removeError   //可以是bool和function,这里使用我们自定义的错误移除方式。
  });

  w5cValidatorProvider.setRules({
    email         : {
      required: "输入的邮箱地址不能为空",
      email   : "输入邮箱地址格式不正确"
    },
    username      : {
      required      : "输入的用户名不能为空",
      pattern       : "用户名必须输入字母、数字、下划线,以字母开头",
      w5cuniquecheck: "输入用户名已经存在,请重新输入"
    },
    password      : {
      required : "密码不能为空",
      minlength: "密码长度不能小于{minlength}",
      maxlength: "密码长度不能大于{maxlength}"
    },
    repeatPassword: {
      required: "重复密码不能为空",
      repeat  : "两次密码输入不一致"
    },
    number        : {
      required: "数字不能为空"
    },
    customizer    : {
      customizer: "自定义验证数字必须大于上面的数字"
    },
    dynamicName:{
      required: "动态Name不能为空"
    },
    dynamic       : {
      required: "动态元素不能为空"
    }
  });
}])

添加自定义验证显示方式代码:

位置如图:

代码如下:

var showError = function(elem, errorMessages){var $elem = angular.element(elem),
    $group = getParentGroup($elem);

  if (!isEmpty($group)){
    if ($group.hasClass("valid-lr")){
      $group.removeClass("valid-lr");
    }

    if (!$group.hasClass("has-error-lr")){
      $group.addClass("has-error-lr");
    }
  }

  var $next = $group.next();
  if (!$next || !$next.hasClass("form-errors")) {
    $group.after('<div class="form-errors"><div class="form-error">' + errorMessages[0] + '</div></div>');
  }
};

var removeError = function (elem){
  var $elem = angular.element(elem),
    $group = getParentGroup($elem);

  if (!isEmpty($group)){
    if ($group.hasClass("has-error-lr")){
      $group.removeClass("has-error-lr");
    }
  }

  var $next = $group.next();
  if (!$next || $next.hasClass("form-errors")) {
    $next.remove();
  }
};

var getParentGroup = function (elem) {
  if (elem[0].tagName === "FORM" || elem[0].nodeType == 11) {
    return null;
  }
  if (elem && elem.hasClass("item-input")) {
    return elem;
  } else {
    return getParentGroup(elem.parent())
  }
};

var isEmpty = function (object) {
  if (!object) {
    return true;
  }
  if (object instanceof Array && object.length === 0) {
    return true;
  }
  return false;
};

Stpe4:使用

 打开www/js/controllers.js,修改'DashCtrl'为如下代码:

.controller('DashCtrl', function($scope) {
  $scope.saveEntity = function ($event) {
    //do somethings for bz
    alert("Save Successfully!!!");
  };
})

打开www/templates/tab-dash.html为如下代码:

<ion-view view-title="w5cValidator Form验证测试">
  <ion-content class="padding">
    <form role="form" w5c-form-validate="vm.validateOptions" novalidate name="validateForm">
      <ion-list class="list-inset">
        <label class="item item-input">
          <i class="icon ion-android-person placeholder-icon"></i>
          <input type="text"
                 name="name"
                 required=""
                 ng-pattern="/^[A-Za-z]{1}[0-9A-Za-z_]{1,19}$/"
                 ng-model="data.username"
                 placeholder="请输入用户名">
        </label>
        <label class="item item-input">
          <i class="icon ion-android-mail placeholder-icon"></i>
          <input type="email"
                 name="email"
                 required=""
                 ng-model="data.email"
                 placeholder="请输入邮箱">
        </label>
        <label class="item item-input">
          <i class="icon ion-android-lock placeholder-icon"></i>
          <input type="password"
                 name="password"
                 required=""
                 ng-model="data.password"
                 placeholder="请输入密码">
        </label>
        <label class="item item-input">
          <i class="icon ion-android-lock placeholder-icon"></i>
          <input type="password"
                 name="repeatPassword"
                 w5c-repeat="password"
                 required=""
                 ng-model="data.repeatPassword"
                 placeholder="请重复输入密码">
        </label>
        <button type="submit" class="button button-full icon-right ion-chevron-right button-calm" w5c-form-submit="saveEntity($event)" >提交</button>
      </ion-list>
    </form>
  </ion-content>
</ion-view>

浏览器调试,结果如下:

 其他:

感谢why520crazy

其他关于w5cValidator资料,请参考:http://www.ngnice.com/posts/236860ed32d3e8

w5cValidator更多Sample,请参考:http://blog.ngnice.com/angular-w5c-validator/example/index.html

 

posted @ 2016-11-17 14:47  LarryNE  阅读(2673)  评论(0编辑  收藏  举报