我已经构建了一个angularjs模块,它提供了几个表单验证,而不是开箱即用的表单验证。在这些验证中有一个名为equalTo,它将要验证的字段的ngModel值作为参数。验证旨在验证$viewValue
的{{1}}以及作为参数传递的ngModel controller
的{{1}}是否严格相等。这将用于密码和确认密码字段作为示例。这一切都有效,除了我需要能够在两个keydown上验证这两个字段。
正如我所说的,所有这些逻辑都有效,除了当我在另一个字段的控制器上调用$viewValue
时,它总是返回undefined并且似乎没有像我期望的那样验证。代码如下,但有很多,所以我已经包含了我的问题。您会注意到,当您输入任何密码时,最初会出现错误,因为确认密码不匹配。当您输入确认密码时没有错误,但初始密码字段仍然存在错误,除非您进入并重新键入。
http://plnkr.co/edit/dIEIuUFMgglOt9uwIDNt?p=preview
以下是代码
ngModel controller
验证指令如下所示
$validate()
验证器服务看起来像这样
<input type="password" ng-model="password" equal-to="confirmPassword">
<input type="password" ng-model="confirmPassword" equal-to="password">
元素收集器服务看起来像这样
function equalTo(Validator) {
return {
restrict: 'A',
require: 'ngModel',
scope: true,
link: function (scope, elem, attr, ctrl) {
var validator = new Validator(elem,attr,ctrl);
validator.validate('equalTo');
}
}
}
答案 0 :(得分:0)
我觉得很傻。问题不在于此代码中,我添加$validate()
方法后,我的解决方案实际上就像在插件中一样。我在我的代码中遇到的问题与一个完全不同的错误有关,该错误导致之后的任何javascript停止运行。解决了这一切,如果我浪费你的时间,我很抱歉。希望这里的代码可以帮助某些人尝试做类似的事情。