2016-03-28 3 views
2

Ich verwende die fcsaNumber-Direktive, um die Gültigkeit von Zahlen zu überprüfen, die in ein Eingabefeld eingegeben wurden. Ich habe das funktioniert, aber der Wert, nach dem ich suche, ist dynamisch, was bedeutet, dass es sich ändern kann, je nachdem welche Optionen ausgewählt wurden. Es scheint, dass diese Anweisung nur einmal initialisiert wird. Was muss ich tun, damit es neu initialisiert wird, wenn sich die Optionen geändert haben?Wie kann ich eine Winkeldirektive reinitialisieren?

//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=""> 

Antwort

4

Der Wiederaufbau der gesamten Richtlinie würde funktionieren, aber es ist eine brute-Force-Lösung - und besonders unerwünscht für Richtlinien wie diese, die Benutzereingaben akzeptieren, die weggeweht würden, wenn Sie die Richtlinie neu zu initiieren.

Stattdessen können Sie scope.$watch oder attrs.$observe verwenden die Richtlinie zu ermöglichen, leichter auf Veränderungen in ihrer Attributwerte zu reagieren:

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 hat eine gute Erklärung für die Unterschiede zwischen $ beobachten und $ beobachten.

5

Sie könnten potenziell ng-if verwenden, um die Richtlinie in Frage zu initialisieren/abreißen. (ng-if docs)

Die ngIf Richtlinie entfernt oder neu erstellt einen Teil des DOM-Baums auf einem Ausdruck basiert. Wenn der Ausdruck ngIf zugewiesen zu einem falschen Wert ergibt dann das Element aus dem DOM entfernt wird, da sonst ein Klon des Elements in das DOM wieder eingesetzt - CodeHater

Ist hier ein großes stack overflow answer auf den Unterschieden zwischen ng-if und ng-show.

Verwandte Themen