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 相关文章推荐
你所要知道JS(DHTML)中的一些技巧
Jan 09 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
Jan 09 Javascript
jquery datepicker参数介绍和示例
Apr 15 Javascript
使用npm发布Node.JS程序包教程
Mar 02 Javascript
javascript与css3动画结合使用小结
Mar 11 Javascript
js中window.open的参数及注意注意事项
Jul 06 Javascript
AngularJS 2.0入门权威指南
Oct 08 Javascript
js实现符合国情的日期插件详解
Jan 19 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
Jun 03 Javascript
Element DateTimePicker日期时间选择器的使用示例
Jul 27 Javascript
Vue的Options用法说明
Aug 14 Javascript
Vue3.0写自定义指令的简单步骤记录
Jun 27 Vue.js
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 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
PHP线程的内存回收问题
2016/07/08 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
2019/03/18 PHP
php实现记事本案例
2020/10/20 PHP
关于JavaScript中string 的replace
2013/04/12 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
JavaScript实现表单注册、表单验证、运算符功能
2018/10/15 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
对于Python的框架中一些会话程序的管理
2015/04/20 Python
python制作websocket服务器实例分享
2016/11/20 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
python如何从文件读取数据及解析
2019/09/19 Python
AUC计算方法与Python实现代码
2020/02/28 Python
python FTP编程基础入门
2021/02/27 Python
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
美国首屈一指的高品质珠宝设计师和零售商:Allurez
2018/01/23 全球购物
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
沈阳故宫导游词
2015/01/31 职场文书
加入学生会自荐书
2015/03/05 职场文书
广告公司文案策划岗位职责
2015/04/14 职场文书
公司年会开场白
2015/06/01 职场文书
名人传读书笔记
2015/06/26 职场文书
初中地理教学反思
2016/02/19 职场文书
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang
nginx内存池源码解析
2021/11/20 Servers