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 基础学习笔记之文档处理
May 29 Javascript
JQuery 学习笔记 选择器之二
Jul 23 Javascript
JavaScript 图片预览效果 推荐
Dec 22 Javascript
Javascript的闭包
Dec 31 Javascript
jquery select下拉框操作的一些说明
Apr 02 Javascript
纯js简单日历实现代码
Oct 05 Javascript
自己动手手写jQuery插件总结
Jan 20 Javascript
jQuery背景插件backstretch使用指南
Apr 21 Javascript
js生成随机数的过程解析
Nov 24 Javascript
快速学习AngularJs HTTP响应拦截器
Dec 31 Javascript
基于JavaScript实现屏幕滚动效果
Jan 18 Javascript
微信小程序左滑删除效果的实现代码
Feb 20 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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
提升PHP执行速度全攻略(上)
2006/10/09 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
解析如何在PHP下载文件名中解决乱码的问题
2013/06/20 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
js单词形式的运算符
2014/05/06 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
关于vue-cli 3配置打包优化要点(推荐)
2019/04/22 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
Python脚本实现格式化css文件
2015/04/08 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
python实现简易数码时钟
2021/02/19 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
Python GUI库PyQt5图形和特效样式QSS介绍
2020/02/25 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
数控技术专业推荐信
2013/11/01 职场文书
办理信用卡工作证明
2014/01/11 职场文书
创业计划书的主要内容有哪些
2014/01/29 职场文书
总经理岗位职责描述
2014/02/08 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
物业管理专业求职信
2014/06/11 职场文书
家长给老师的感谢信
2015/01/20 职场文书
虎兄虎弟观后感
2015/06/12 职场文书
《三国志》赏析
2019/08/27 职场文书