Angular使用ng-messages与PHP进行表单数据验证


Posted in Javascript onDecember 28, 2016

Angular中的ng-messages提供了更方便的表单数据验证服务。

本文代码主要基于《AngularJS权威教程》中关于ng-messages模块的说明,但原文中不乏错误以及没有后台代码和示例,所以简单的实现其功能。//别的地方也有错误,我一度怀疑我买了盗版书==

比如我们想与后台进行表单数据合法性验证并给出输入操作提示

HTML代码:

<!DOCTYPE html>
<html lang="en" ng-app="app">

<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="angular.js"></script>
  <script src="angular-messages.js"></script>
  <script>
  angular.module("app", ["ngMessages"])
    .directive("ensureUnique", function($http) {
      return {
        require: "?^ngModel",
        //原文中混用了ngModel和ctrl,这里统一使用ngModel,意指ngModelController
        link: function(scope, element, attrs, ngModel) {


          var url = attrs.ensureUnique;
          if (!ngModel) {
            return false;
          }
          ngModel.$parsers.push(function(val) {
            if (!val || val.length == 0) {
              return false;
            }

            //设置表单状态,属性统一归于signup_form.username.$error中,这是为设置是否合法状态,所以如果设置为false,则会在ng-messages中显示,因为它调用的是$error方法,意为是否“不合法”,原文有错误。
            ngModel.$setValidity("checkingAvailability", false);
            ngModel.$setValidity("usernameAvailability", true);

            $http({
              method: "POST",
              url: url,
              data: {
                username: val
              }
            }).then(function(r) {
              if ("exist" == r.data) {
                ngModel.$setValidity("checkingAvailability", true);
                ngModel.$setValidity("usernameAvailability", false);
              } else {
                ngModel.$setValidity("checkingAvailability", true);
                ngModel.$setValidity("usernameAvailability", true);
              }
            }, function(e) {
              console.log(e);
            })

            return val;
          })
        }
      }
    })
    .controller("MainController", function($scope) {
      $scope.signup = {
        username: ""
      }
    })
  </script>
</head>

<body>
  <div ng-controller="MainController">
    <form name="signup_form" novalidate ng-submit="signupForm()">
      <!-- 原文中指令放在了form元素中,应该放在input元素中 -->
      <input type="text" name="username" ng-model="signup.username" required ng-min-length=3 ng-max-length=10 ensure-unique="check.php">
      <!-- 输入过才显示操作信息 -->
      <div class="error" ng-show="signup_form.$dirty" ng-messages="signup_form.username.$error" ng-messages-multiple>
        <div ng-message="required">
          Required!!!
        </div>
        <div ng-message="checkingAvailability">
          Checking...
        </div>
        <div ng-message="usernameAvailability">
          Has been taken, please choose another.
        </div>
      </div>
      <div>
        <button type="submit">Submit</button>
      </div>
      <p>{{signup_form.username.$error}}</p>
    </form>
  </div>
</body>

</html>

PHP代码:

<?php

  //Angular与jQuery传递参数类型不同,不能直接使用$.POST['username']获取;
  $postData = file_get_contents('php://input', true); 
  $obj=json_decode($postData);

  //这里模拟唯一性验证
  if($obj->username == '123'){
    echo "exist";
  }
  else{
    echo "available";
  }
?>

效果:

Angular使用ng-messages与PHP进行表单数据验证

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
关于图片验证码设计的思考
Jan 29 Javascript
JavaScript 组件之旅(四):测试 JavaScript 组件
Oct 28 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
Nov 25 Javascript
ajax java 实现自动完成功能
Dec 19 Javascript
JavaScript实现自己的DOM选择器原理及代码
Mar 04 Javascript
Js放到HTML文件中的哪个位置有什么区别
Aug 21 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
Sep 02 Javascript
原生JS实现的自动轮播图功能详解
Dec 28 Javascript
JavaScript修改注册表实例代码
Jan 05 Javascript
JavaScript实现随机点名器
Mar 25 Javascript
js实现简单贪吃蛇游戏
May 15 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
Aug 03 Javascript
Bootstrap中datetimepicker使用小结
Dec 28 #Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
Dec 28 #Javascript
angular-ui-sortable实现可拖拽排序列表
Dec 28 #Javascript
JS正则表达式之非捕获分组用法实例分析
Dec 28 #Javascript
JavaScript实现经典排序算法之插入排序
Dec 28 #Javascript
JavaScript实现经典排序算法之选择排序
Dec 28 #Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
Dec 28 #Javascript
You might like
php中http_build_query 的一个问题
2012/03/25 PHP
ThinkPHP3.2.3实现分页的方法详解
2016/06/03 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
浅谈jQuery构造函数分析
2015/05/11 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
2016/05/20 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
vue点击当前路由高亮小案例
2019/09/26 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
[53:15]Newbee vs Pain 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
Python3基础之输入和输出实例分析
2014/08/18 Python
Python random模块常用方法
2014/11/03 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
python的socket编程入门
2018/01/29 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
python将txt文件读取为字典的示例
2018/12/22 Python
简单了解python中对象的取反运算符
2019/07/01 Python
python 自定义装饰器实例详解
2019/07/20 Python
Python json转字典字符方法实例解析
2020/04/13 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
新秀丽官方旗舰店:Samsonite拉杆箱、双肩包、皮具
2018/03/05 全球购物
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
Java的五个基础面试题
2016/02/26 面试题
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
汽车维修专业个人求职信范文
2014/01/01 职场文书
幼儿园毕业典礼主持词
2014/03/21 职场文书
《梅花魂》教学反思
2014/04/30 职场文书
致运动员的广播稿
2015/08/19 职场文书
环保建议书作文400字
2015/09/14 职场文书
六年级作文之家庭作文
2019/12/12 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
Golang中异常处理机制详解
2021/06/08 Golang
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python