美文网首页
validator相关的指令

validator相关的指令

作者: yb_剑笙 | 来源:发表于2016-09-19 22:08 被阅读0次

概述

数据输入有效性校验相关的指令一共有四个,实际是八个(每一个指令都有一个ng开头的同名指令):

指令 说明
required,ng-required 必须有输入
pattern,ng-pattern 正则或函数进行校验
minlength,ng-minlength 最小长度控制
maxlength,ng-maxlength 最大长度控制

这个指令必须依赖ng-model,如果没有设置ng-model,就不会有任何动作。

实现细节

四个指令的实现细节基本上是一模一样的:
1、设置controller的校验回调函数。
2、监控对应的属性,如果数据发生变化,就调用model controller的$validate进行有效性校验。
以required为例:

ctrl.$validators.required = function(modelValue, viewValue) {
  return !attr.required || !ctrl.$isEmpty(viewValue);
};

attr.$observe('required', function() {
  ctrl.$validate();
});
指令 回调函数名称
required,ng-required $validators.required
pattern,ng-pattern $validators.pattern
maxlength,ng-maxlength $validators.maxlength
minlength,ng-minlength $validators.minlength

四个指令对应的校验回调:

指令 回调函数名称
required,ng-required $validators.required
pattern,ng-pattern $validators.pattern
maxlength,ng-maxlength $validators.maxlength
minlength,ng-minlength $validators.minlength

这些回调会在ng-model中调用:

function processSyncValidators() {
  var syncValidatorsValid = true;
  forEach(ctrl.$validators, function(validator, name) {
    var result = validator(modelValue, viewValue);
    syncValidatorsValid = syncValidatorsValid && result;
    setValidity(name, result);
  });
  if (!syncValidatorsValid) {
    forEach(ctrl.$asyncValidators, function(v, name) {
      setValidity(name, null);
    });
    return false;
  }
  return true;
}

从中可以看出,当需要添加或值修改ng-model的校验方式时,只需要修改$validators的属性就可以了。

样例代码

<!DOCTYPE html>
<html lang="en" ng-app="app">
<!--<html>-->
<head>
    <title>Test</title>
</head>
<body>
     <div ng-controller="ExampleController">
         <form name="form">
             <label for="required">Toggle required: </label>
             <input type="checkbox" ng-model="required" id="required" />
             <br>
             <label for="input">This input must be filled if `required` is true: </label>
             <input type="text" ng-model="model" id="input" name="input" ng-required="required" /><br>
             <hr>
             required error set? = <code>{{form.input.$error.required}}</code><br>
             model = <code>{{model}}</code>
         </form>
         </div>
<script src="./node_modules/angular/angular.js" type="text/javascript"></script>
<script>
    angular.module('app', [])
            .controller('ExampleController', ['$scope', function ($scope) {
                $scope.required = true;
            }]);
</script>
</body>
</html>

这段代码实现了一个控制输入框的required属性的功能,可以看到required属性为treu和false时输入框为空时的数据变化。

相关文章

  • validator相关的指令

    概述 数据输入有效性校验相关的指令一共有四个,实际是八个(每一个指令都有一个ng开头的同名指令): 这个指令必须依...

  • JSR 303验证相关问题及解决 办法

    使用 Hibernate Validator 导入Hibernate Validator的相关jar包 在相关字段...

  • Linux软件管理day17

    yum指令yum本地仓库搭建 一、yum指令 1.与yum仓库相关指令 2.与yum缓存相关指令 3.组包相关指令...

  • SpringBoot2.0实战 | 第八章:SpringBoot

    spring-boot-starter-web 项目中默认已经集成了 hibernate-validator 相关...

  • day17-Linux学习 软件管理yum(中)

    一、YUM相关知识点 1、与yum仓库相关指令 2、与yum缓存相关指令 3、组包相关指令 二、搭建本地仓库 有的...

  • validator 相关注解整理

    嵌套注解 @Valid(javax.validation.Valid) 空和非空检查: @Null、@NotNul...

  • web相关

    html validator: http://validator.w3.org/ css validator: h...

  • iOS-常见问题记录

    cocoapods相关 执行验证命令 问题截图: 解决措施:检测的源码在validator.rb文件 如何找到它?...

  • select相关的指令

    概述 select指令实现的是下拉框的功能,一般会配合option指令以及ng-model指令使用。在select...

  • git的相关指令

    1.版本控制工具的分类 1.集中式版本控制 svn2.分布式版本控制 git 2.新建的仓库 默认是在主分支上...

网友评论

      本文标题:validator相关的指令

      本文链接:https://www.haomeiwen.com/subject/otbnettx.html