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 相关文章推荐
javascript for循环设法提高性能
Feb 24 Javascript
基于jQuery架构javascript基础体系
Jan 01 Javascript
js读取注册表的键值示例
Sep 25 Javascript
JS实现页面跳转参数不丢失的方法
Nov 28 Javascript
Angularjs 与 bower安装和使用详解
May 11 Javascript
在React中如何优雅的处理事件响应详解
Jul 24 Javascript
js微信分享实现代码
Oct 11 Javascript
Vue中的Vux配置指南
Dec 08 Javascript
Nuxt.js开启SSR渲染的教程详解
Nov 30 Javascript
JQuery属性操作与循环用法示例
May 15 jQuery
微信小程序图片自适应实现解析
Jan 21 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
Jul 20 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常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
js substr、substring和slice使用说明小记
2011/09/15 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
微信小程序实现换肤功能
2018/03/14 Javascript
iview日期控件,双向绑定日期格式的方法
2018/03/15 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
JavaScript判断浏览器版本的方法
2019/11/03 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
初学者学习Python好还是Java好
2020/05/26 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
python 如何区分return和yield
2020/09/22 Python
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
英国在线药房:Express Chemist
2019/03/28 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
总裁助理岗位职责
2014/02/17 职场文书
公司晚会主持词
2014/03/22 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
初中班长竞选稿
2015/11/20 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电