5

フォームの検証ディレクティブを作成しました。基本的に、別のフィールドのデータに基づいてフィールド値を検証します。

それは完璧に動作します:-)

私の問題は、検証が実行された後に他のフィールドが変更された場合、検証が再度実行されないことです。

var myApp = angular.module('myApp', [])

.directive('validateInteger', function() {
  return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
      ctrl.$parsers.unshift(function(viewValue) {
          var int1val = scope.int1;
          scope.int2valid = (viewValue > int1val) ? "valid" : undefined;
          if (scope.int2valid == "valid") {
              ctrl.$setValidity('higher', true);
              return viewValue;
          } else {
              ctrl.$setValidity('higher', false);
              return undefined;
        }
      });
    }
  };
});

jsfiddle: http://jsfiddle.net/hanspc/vCFFQ/

4

2 に答える 2

2

おそらく、より簡単な解決策は、エラースパンの ng-show ディレクティブ内のウォッチャーまたは式でさえあるでしょう。

ng-show ディレクティブ内で式を使用すると、次のようになります。

<span ng-show="int1 > int2" style="color: red; display:none">   

それ以外の場合は、モデル int1 と int2 の変更を監視し、それらの値を比較できます。

$scope.$watch('int1+int2', function () {
    if($scope.int1 > $scope.int2) {
        $scope.error = true;    
    }else {
        $scope.error = false;
    }
}) 

<span ng-show="error" style="color: red; display:none"> 

ここにフィドルがあります

于 2013-06-02T19:14:41.203 に答える