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之十四 (触发事件核心方法)
Aug 23 Javascript
Javascript中 关于prototype属性实现继承的原理图
Apr 16 Javascript
用innerhtml提高页面打开速度的方法
Aug 02 Javascript
Node.js中创建和管理外部进程详解
Aug 16 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
Feb 13 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
May 03 Javascript
老生常谈combobox和combotree模糊查询
Apr 17 Javascript
vue mixins组件复用的几种方式(小结)
Sep 06 Javascript
使用ajax的post同步执行(实现方法)
Dec 21 Javascript
vue js秒转天数小时分钟秒的实例代码
Aug 08 Javascript
使用layui 渲染table数据表格的实例代码
Aug 19 Javascript
JS定义函数的几种常用方法小结
May 23 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
一个简单实现多条件查询的例子
2006/10/09 PHP
php一些公用函数的集合
2008/03/27 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
jquery插件之easing 动态菜单
2010/08/21 Javascript
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
js实现可输入可选择的select下拉框
2016/12/21 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
NodeJs使用Mysql模块实现事务处理实例
2017/05/31 NodeJs
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
python刷投票的脚本实现代码
2014/11/08 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
jupyter notebook 调用环境中的Keras或者pytorch教程
2020/04/14 Python
python dict如何定义
2020/09/02 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
3D空间设计学生找工作的自我评价
2013/10/28 职场文书
就业表自我评价分享
2014/02/06 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
党员作风建设自查报告
2014/10/23 职场文书
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL