我使用$validator
编写自定义表单验证指令。
目前它看起来像这样:
module.directive('tweetLength', function(URLDetector) {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ctrl) {
var allowedCharacters;
allowedCharacters = parseInt(attrs.tweetLength);
ctrl.$validators.tweetLength = function(modelValue, viewValue) {
var result;
return result = URLDetector.urlAdjustedCharacterCount(modelValue) <= allowedCharacters;
};
}
};
});
它会检查所附元素的模型的字符数,同时考虑链接缩短(因此ng-minlength
和ng-maxlength
不起作用)。如果不满足要求,则返回false。问题是当它返回false modelValue
时undefined
。我知道此时该值应存储在$$invalidModelValue
中,但我仍然需要原始模型中的值,因为它在视图中的其他位置使用。
有没有办法阻止Angular移动它并制作原始模型undefined
?我知道这个问题可以在表单控制器中解决,但我不认为这是正确的方法,因为我想使用表单状态而不是某些外部变量来禁用表单提交按钮。在使用Angular表单验证时是否有其他方法可以解决此问题?
答案 0 :(得分:7)
从Angular v.1.3开始,当$validate()
返回false时,ng-model
的值设置为undefined(docs here)
要防止出现此问题,请将ngModelOptions
的allowInvalid
属性设置为true,如下所示:
ng-model-options="{allowInvalid: true}"