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 相关文章推荐
在html页面中包含共享页面的方法
Oct 24 Javascript
基于jquery跨浏览器显示的file上传控件
Oct 24 Javascript
JS特权方法定义作用以及与公有方法的区别
Mar 18 Javascript
有关Promises异步问题详解
Nov 13 Javascript
js倒计时简单实现方法
Dec 17 Javascript
json定义及jquery操作json的方法
Sep 29 Javascript
微信小程序实现多个按钮toggle功能的实例
Jun 13 Javascript
underscore之Collections_动力节点Java学院整理
Jul 10 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
Nov 01 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
May 14 Javascript
Vue项目中使用WebUploader实现文件上传的方法
Jul 21 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
Sep 29 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中explode函数和split函数的区别小结
2016/08/24 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
js实现鼠标单击Tab表单切换效果
2018/05/16 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
[01:46]新英雄登场
2019/09/10 DOTA
python学习笔记:字典的使用示例详解
2014/06/13 Python
python通过socket查询whois的方法
2015/07/18 Python
Python导出DBF文件到Excel的方法
2015/07/25 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
2019/01/14 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
python实现简单俄罗斯方块
2020/03/13 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
C语言笔试题
2014/09/04 面试题
财务会计专业个人求职信范本
2014/01/08 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书
公务员年终个人总结
2015/02/12 职场文书
魂断蓝桥观后感
2015/06/10 职场文书