繁体   English   中英

表单的服务器端验证

[英]Server-side validation for form

表单的默认验证我按预期工作。 但是,当用户键入有效的电子邮件地址和最少三个字符的密码时,这并不意味着登录凭据有效。

所以我的问题是:

如何在服务器端验证后将模型电子邮件密码设置为无效,因此输入字段将获取类ng-invalid而非ng-valid。

我目前的代码

function IndexCtrl( $scope, $http )
{
  $scope.form = {};
  $scope.submitLogin = function ()
  {
    $http.post( '/api/auth/login', $scope.form ).success( function( data )
    {
      if ( !data.success )
      {
        $scope.form.errors = [ data ];

        // here I also want to mark the models 'email' and 'password' as invalid, so they both get the class 'ng-invalid'
      }
      else
      {
        $location.path( '/' );
      }
    });
  };
}

Tosh shimayama给出了正确的答案。 $ NgModelControllerNgModelController一个方法,它接受两个参数: validationErrorKeyisValid

有关$ setValidity的更多信息

更改有效性状态,并在控件更改有效性时通知表单。 (即如果给定的验证器已被标记为无效,则不通知表格)。

源代码和进一步信息AngularJS:NgModelController

客户端验证很快,但很容易破坏,例如 - firebug。 您只能坚持服务器端验证。 验证服务器上的所有内容并使用键列表和错误消息返回BODY。 Angular允许您以异步方式将数据发送到服务器,最终用户将其视为客户端验证,因为没有可见的回发。

查看此示例,尝试单击“保存”,然后查看错误消息: upida.cloudapp.net : 8080/org.upida.example.angular/order/create?clientId=1

你可以下载它: upida.codeplex.com

这是一个很好的验证指令,可能很有用https://groups.google.com/forum/#!msg/angular/6v-AillQboI/D0OaZzV7Me0J

我做了一些事情,但它的轨道具体,也许它可以给某人一个想法,或推进正确的方向https://github.com/fmatosic/bubblemevalid

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM