2016-03-28 193 views
2

我正在使用fcsaNumber指令來檢查輸入到輸入框中的數字的有效性。我得到了這個工作,但是我檢查的值是動態的,這意味着它可以根據選擇的選項而改變。看來這個指令只會初始化一次。當選項發生變化時,我需要做些什麼才能重新初始化?如何重新初始化Angular指令?

//this works fine 
    <input name="Employees" type="text" ng-model="Input.Employees" fcsa-number="{min: 1}" required=""> 

//this only inits once, so its not dynamic 
    <input name="Employees" type="text" ng-model="Input.Employees" fcsa-number="{{getMin()}}" required=""> 

回答

4

重建整個指令是可行的,但這是一個蠻力的解決方案 - 對於像這樣的指令來說,接受用戶輸入的指令尤其不受歡迎,如果您要重新初始化指令,這種指令就會被吹掉。

相反,你可以使用scope.$watchattrs.$observe允許指令在其屬性值的變化更容易地迴應:

module.directive('foo', function() { 
    return { 
     scope: { 
      'bar': '@' 
     }, 
     link: function(scope, element, attrs) { 
      scope.$watch('bar', function() { 
       // runs when scoped value 'bar' changes 
      }); 
      attrs.$observe('baz', function() { 
       // Similar to $watch, but without isolate scope 
      }); 
     } 
    } 
}); 

AngularJS : Difference between the $observe and $watch methods有$之間的差異一個很好的解釋觀察和$觀看。

5

您可能會使用ng-if來初始化/拆除有問題的指令。 (ng-if docs

ngIf指令刪除或重新創建基於表達式DOM樹 的一部分。如果分配給ngIf表達式求 爲假值,則該元素從DOM中移除,否則 克隆的元素重新插入到DOM - CodeHater

這裏有ng-if之間的差異很大stack overflow answerng-show