Angularjs> 1.3 $ validator导致modelValue未定义

时间:2015-03-17 23:01:49

标签: angularjs validation angularjs-directive

我使用$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-minlengthng-maxlength不起作用)。如果不满足要求,则返回false。问题是当它返回false modelValueundefined。我知道此时该值应存储在$$invalidModelValue中,但我仍然需要原始模型中的值,因为它在视图中的其他位置使用。

有没有办法阻止Angular移动它并制作原始模型undefined?我知道这个问题可以在表单控制器中解决,但我不认为这是正确的方法,因为我想使用表单状态而不是某些外部变量来禁用表单提交按钮。在使用Angular表单验证时是否有其他方法可以解决此问题?

1 个答案:

答案 0 :(得分:7)

从Angular v.1.3开始,当$validate()返回false时,ng-model的值设置为undefined(docs here

要防止出现此问题,请将ngModelOptionsallowInvalid属性设置为true,如下所示:

ng-model-options="{allowInvalid: true}"