Angular使用ng-messages与PHP进行表单数据验证

发布时间 - 2026-01-10 22:10:08    点击率:

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表单验证  # AngularJS实现表单验证  # AngularJS使用ngMessages进行表单验证  # 详解AngularJS实现表单验证  # AngularJS使用angular-formly进行表单验证  # AngularJS中实现用户访问的身份认证和表单验证功能  # AngularJS自动表单验证  # AngularJS手动表单验证  # 详细解读AngularJS中的表单验证编程  # AngularJs表单验证实例详解  # Angular表单验证实例详解  # 表单  # 放在  # 的是  # 这是  # 也有  # 因为它  # 设置为  # 则会  # 更方便  # 大家多多  # 意为  # 有错误  # 不合法  # 意指  # 是否合法  # 盗版书  # 我买了  # ensureUnique  # http  # function 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  使用豆包 AI 辅助进行简单网页 HTML 结构设计  如何确保西部建站助手FTP传输的安全性?  如何在云虚拟主机上快速搭建个人网站?  如何在阿里云域名上完成建站全流程?  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  网站建设要注意的标准 促进网站用户好感度!  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  Python文件操作最佳实践_稳定性说明【指导】  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  什么是javascript作用域_全局和局部作用域有什么区别?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何选择PHP开源工具快速搭建网站?  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  JavaScript如何实现路由_前端路由原理是什么  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  南京网站制作费用,南京远驱官方网站?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  html如何与html链接_实现多个HTML页面互相链接【互相】  长沙做网站要多少钱,长沙国安网络怎么样?  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  网站建设保证美观性,需要考虑的几点问题!  如何续费美橙建站之星域名及服务?  🚀拖拽式CMS建站能否实现高效与个性化并存?  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  bing浏览器学术搜索入口_bing学术文献检索地址  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  Laravel如何处理异常和错误?(Handler示例)  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  焦点电影公司作品,电影焦点结局是什么?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel如何使用Collections进行数据处理?(实用方法示例)  JavaScript如何实现错误处理_try...catch如何捕获异常?  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  网站制作大概多少钱一个,做一个平台网站大概多少钱?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  如何快速生成凡客建站的专业级图册?  装修招标网站设计制作流程,装修招标流程?  香港服务器租用每月最低只需15元?