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 相关文章推荐
二级域名转向类
Nov 09 Javascript
各种效果的jquery ui(接口)介绍
Sep 17 Javascript
IE无法设置短域名下Cookie
Sep 23 Javascript
window resize和scroll事件的基本优化思路
Apr 29 Javascript
jQuery实现图像旋转动画效果
May 29 Javascript
jQuery弹出窗口简单实现代码
Mar 09 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
May 17 Javascript
利用js编写网页进度条效果
Oct 08 Javascript
React 高阶组件入门介绍
Jan 11 Javascript
小程序自定义日历效果
Dec 29 Javascript
40行代码把Vue3的响应式集成进React做状态管理
May 20 Javascript
Vue时间轴 vue-light-timeline的用法说明
Oct 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 array_unique之后json_encode需要注意
2011/01/02 PHP
php笔记之:文章中图片处理的使用
2013/04/26 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
JavaScript 拾漏补遗
2009/12/27 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
当jquery ajax遇上401请求的解决方法
2016/05/19 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
Angular5中调用第三方库及jQuery的添加的方法
2018/06/07 jQuery
原生js实现form表单序列化的方法
2018/08/02 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
Python调用命令行进度条的方法
2015/05/05 Python
flask入门之表单的实现
2018/07/18 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
html5实现移动端适配完美写法
2017/11/16 HTML / CSS
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
车辆安全检查制度
2014/01/12 职场文书
学生自我评价范文
2014/02/02 职场文书
市级文明单位申报材料
2014/05/07 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
政治学求职信
2014/06/03 职场文书
销售团队激励口号
2014/06/06 职场文书
松材线虫病防治方案
2014/06/15 职场文书
门卫岗位职责
2015/02/09 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
交通事故代理词范文
2015/05/23 职场文书
《童年的发现》教学反思
2016/02/18 职场文书
浅谈Python魔法方法
2021/06/28 Java/Android
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python