2014-02-18 63 views

回答

1

您可以在myValue創建一個表,當值改變執行您的驗證......

angular.module('App', []) 
    .directive('myValidation', function() { 
    return { 
     restrict: 'A', 
     require: "ngModel", 
     link: function (scope, element, attrs, ngModel) { 
      scope.$watch(function() { 
       return ngModel.$modelValue; 
      }, function (newVal, oldVal) { 
       if (newVal === 'A') { 
        scope.myValue = 'B'; 
       } 
      }); 
     } 
    }; 
}); 

小提琴:http://jsfiddle.net/fMTVm/1/

+0

謝謝你,安東尼。如果可以的話,請回答如何防止$ watch連鎖反應。我明白爲什麼會發生,但無法找出改變其行爲的方式。讓我們在你的例子中擴展$ watch第二個參數的主體,以瞭解我的意思。如果我們要求 如果(的newval === 'A'){ scope.myValue = 'B' } 否則如果(的newval === 'B'){ scope.myValue = 'C' } 然後輸入 – diziaq

+0

...然後在輸入'A'上,我們在輸入字段中獲得'C',但是我希望它是'B'。我明白爲什麼會發生,但無法找出改變其行爲的方式。 – diziaq

+0

有趣的問題...你有權訪問舊值,因此理論上你可以檢查它,如果newValue ==='B'&& oldValue ==='A'',則不會轉換到'C'。但是,這並不完全令人驚歎,如果它變得更復雜,它可能不起作用。 –