13

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

所以我的问题是:

如何在服务器端验证后将模型电子邮件密码设置为无效 ,以便输入字段获取类 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( '/' );
      }
    });
  };
}
4

4 回答 4

5

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

有关$setValidity的更多信息

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

AngularJS的来源和更多信息:NgModelController

于 2012-08-29T09:24:25.807 回答
3

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

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

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

于 2013-09-10T22:41:46.910 回答
0

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

于 2013-02-04T20:28:52.457 回答
0

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

于 2013-06-14T15:21:55.970 回答