【问题标题】:Server-side validation for form表单的服务器端验证
【发布时间】:2012-08-28 09:02:37
【问题描述】:

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

所以我的问题是:

我怎样才能将模型 email 和 password 设置为无效后 服务器端验证,因此输入字段获得类 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( '/' );
      }
    });
  };
}

【问题讨论】:

  • 你可以简单地使用 $setValidity 方法吗?
  • 完全不相关,但是当我的 AJAX 调用返回错误时,我将状态码设置为 400。这样您就不需要检查或设置data.success,而只需在错误回调中处理错误。

标签: javascript angularjs


【解决方案1】:

Tosh shimayama 给出了正确答案。 $setValidity 是来自NgModelController 的一个方法,它采用两个参数:validationErrorKey 和isValid。

关于 $setValidity

的更多信息

改变有效状态,并在控制时通知表单 更改有效性。 (即,如果给定的验证器是,它不会通知表单 已标记为无效)。

来源和更多信息AngularJS: NgModelController

【讨论】:

    【解决方案2】:

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

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

    您可以下载:upida.codeplex.com

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我做了一些事情,但它是特定的,也许它可以给某人一个想法,或者朝着正确的方向前进 https://github.com/fmatosic/bubblemevalid

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-13
          • 2011-10-17
          • 1970-01-01
          • 2014-04-06
          相关资源
          最近更新 更多