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 getComputedStyle获取和设置style的原理
Oct 10 Javascript
再谈javascript图片预加载技术(详细演示)
Mar 12 Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
Dec 31 Javascript
jQuery弹性滑动导航菜单实现思路及代码
May 02 Javascript
jquery(hide方法)隐藏指定元素实例
Nov 11 Javascript
一个JavaScript函数把URL参数解析成Json对象
Sep 24 Javascript
jquery获取多个checkbox的值异步提交给php
Jul 07 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
Dec 11 Javascript
jQuery 实现双击编辑表格功能
Jun 19 jQuery
JS中的算法与数据结构之队列(Queue)实例详解
Aug 20 Javascript
JS call()及apply()方法使用实例汇总
Jul 11 Javascript
js面试题之异步问题的深入理解
Sep 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
延长phpmyadmin登录时间的方法
2011/02/06 PHP
php读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
Jquery 实现table样式的设定
2015/01/28 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
前端jquery部分很精彩
2016/05/03 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
js实现内置计时器
2019/12/16 Javascript
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
javascript实现倒计时提示框
2021/03/02 Javascript
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
python文件及目录操作代码汇总
2020/07/08 Python
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
电子商务专业学生的自我鉴定
2013/11/28 职场文书
房地产融资计划书
2014/01/10 职场文书
大学生党员自我评价范文
2014/04/09 职场文书
《画杨桃》教学反思
2014/04/13 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python