表单的默认验证我按预期工作。但是,当用户键入有效的电子邮件地址和最少三个字符的密码时,这并不意味着登录凭据有效。
所以我的问题是:
如何将模型电子邮件和密码设置为无效 服务器端验证,因此输入字段获取类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( '/' );
}
});
};
}
答案 0 :(得分:5)
Tosh shimayama给出了正确的答案。 $ setValidity 是来自NgModelController
的方法,有两个参数:validationErrorKey
和isValid
。
有关 $ setValidity
的更多信息更改有效性状态,并在控件时通知表单 改变有效性。 (即如果给定的验证员是,则不通知表格 已标记为无效)。
来源和进一步信息AngularJS: NgModelController
答案 1 :(得分:3)
客户端验证很快,但很容易破坏,例如使用 - firebug。 您只能坚持服务器端验证。验证服务器上的所有内容并使用键列表和错误消息返回BODY。 Angular允许您以异步方式将数据发送到服务器,最终用户将其视为客户端验证,因为没有可见的回发。
请参阅此示例,尝试点击“保存”,然后看到错误消息:upida.cloudapp.net:8080/org.upida.example.angular/order/create?clientId=1
您可以下载它:upida.codeplex.com
答案 2 :(得分:0)
这是一个很好的验证指令,可能很有用{{3p>
答案 3 :(得分:0)
我做了一些事情,但它的轨道具体,也许它可以给某人一个想法,或推动正确的方向 https://github.com/fmatosic/bubblemevalid