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 解析后的xml对象的读取方法细解
Jul 25 Javascript
jQuery ui 1.7更新小结
Aug 15 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
May 26 Javascript
关于 文本框默认值 的操作js代码
Jan 12 Javascript
JavaScript程序员应该知道的45个实用技巧
Mar 04 Javascript
c#+jquery实现获取radio和checkbox的值
Sep 12 Javascript
Ionic快速安装教程
Jun 03 Javascript
关于JavaScript数组你所不知道的3件事
Aug 24 Javascript
js按条件生成随机json:randomjson实现方法
Apr 07 Javascript
vue2中引用及使用 better-scroll的方法详解
Nov 15 Javascript
koa router 多文件引入的方法示例
May 22 Javascript
ES6 Array常用扩展的应用实例分析
Jun 26 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文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
php基本函数汇总
2015/07/09 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
2019/03/18 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
(function(){})()的用法与优点
2007/03/11 Javascript
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
javascript折半查找详解
2015/01/26 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
jquery实现图片上传之前预览的方法
2015/07/11 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
2016/12/15 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
微信小程序 授权登录详解(附完整源码)
2019/08/23 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
Python 实现数据结构-堆栈和队列的操作方法
2019/07/17 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
2020/04/21 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
简述数组与指针的区别
2014/01/02 面试题
管理学专业个人求职信范文
2013/09/21 职场文书
普通大学毕业生自荐信
2013/11/04 职场文书
委托书的写法
2014/09/16 职场文书
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
2019广播稿怎么写
2019/04/17 职场文书
Oracle表空间与权限的深入讲解
2021/11/17 Oracle