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 相关文章推荐
jquery ajax提交整个表单元素的快捷办法
Mar 27 Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
Feb 27 Javascript
swtich/if...else的替代语句
Aug 16 Javascript
深入剖析javascript中的exec与match方法
May 18 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
Jul 18 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
Dec 02 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
May 02 Javascript
详解基于vue的移动web app页面缓存解决方案
Aug 03 Javascript
JS原型继承四步曲及原型继承图一览
Nov 28 Javascript
利用vue开发一个所谓的数独方法实例
Dec 21 Javascript
JS+canvas五子棋人机对战实现步骤详解
Jun 04 Javascript
vue-cli3 引入 font-awesome的操作
Aug 11 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 socket实现的聊天室代码分享
2014/08/16 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
Textarea根据内容自适应高度
2013/10/28 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
JavaScript中的console.profile()函数详细介绍
2014/12/29 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
2016/08/24 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
python中数据爬虫requests库使用方法详解
2018/02/11 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
python3实现猜数字游戏
2020/12/07 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
平面设计的岗位职责
2013/11/08 职场文书
组织关系转移介绍信
2014/01/16 职场文书
微观物理专业自荐信
2014/01/26 职场文书
安全横幅标语
2014/06/09 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
活动总结格式
2014/08/30 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
2015年入党决心书
2015/02/05 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
python中requests库+xpath+lxml简单使用
2021/04/29 Python