$ validators返回false时,使用ng-model-options删除范围变量

时间:2015-07-23 19:02:12

标签: angularjs

这是我问题的小提琴 它非常简单......似乎角度遇到问题。

http://plnkr.co/edit/5diCIhFoWX8FneSSBkfA?p=preview

说明

我正在使用ng-model-options,因此只有在输入上出现模糊事件时才能更新模型。

<input type="text" ng-model="myText" ng-model-options="{ updateOn : 'blur' }">

这样可以正常工作,但是当我添加一个指令来触发$ validators时,myText范围变量会在$validators返回false时消失。

<input type="text" ng-model="myText" ng-model-options="{ updateOn : 'blur' }" check-errors>

指令

.directive('checkErrors', function(){

  return {

    require : 'ngModel',
    link : function(){

          ngModel.$validators.validHour = function(modelValue){
                return true;
          };
    }
  };

});

要查看问题,请将return true;更改为return false;更改输入并创建模糊事件。

修改
新的Plunker:
http://plnkr.co/edit/5diCIhFoWX8FneSSBkfA?p=preview

我认为它应该在ng-repeat中引发问题,但事实并非如此。

1 个答案:

答案 0 :(得分:2)

看来这是Angularjs中的正确行为,这意味着你想做什么呢?

以下是一些选项......

allowInvalid:true 添加到您的选项中,会显示正在呈现的文本,但是您将否定验证。

查看更新的plunker link

ng-model-options="{ updateOn : 'blur', allowInvalid: true }"

<强>更新

尝试在Angular代码库中找到$ validators,或许这与它的正确行为有关。

code base $validtors

ctrl.$$runValidators(modelValue, viewValue, function(allValid) {
  // If there was no change in validity, don't update the model
  // This prevents changing an invalid modelValue to undefined
  if (!allowInvalid && prevValid !== allValid) {
    // Note: Don't check ctrl.$valid here, as we could have
    // external validators (e.g. calculated on the server),
    // that just call $setValidity and need the model value
    // to calculate their validity.
    ctrl.$modelValue = allValid ? modelValue : undefined;

看起来ctrl。$ modalValue只有在模型通过验证时才会设置为更新,或者未定义,这就是为什么你的

        <pre> {{ appCtrl.test }} </pre>

正在消失。没有任何价值可以呈现。