2016-07-14 20 views
0

Ich habe eine benutzerdefinierte Direktive auf die Änderung der Ansicht Wert hinzufügen Klassen zu einem input:text basierend auf seinem Wert.

restrict: 'A', 
require : 'ngModel', 
link : function(scope, element, attrs, modelCtrl) { 
    function apply(input) { 
    // Simplified .. 
    if (input!=='Ooops' && isNaN(parseFloat(input)) { 
     modelCtrl.$setViewValue('Ooops'); 
     element.addClass('is-nan'); 
     return undefined; 
    } 
    } 

    modelCtrl.$parsers.push(apply); 
} 

Es funktioniert gut, wenn ich den Wert bearbeiten. Ich möchte jedoch die gleiche Logik anwenden, wenn das Element durch Angular gebunden ist, so dass die Klassen und Ansichtswerte festgelegt werden.

Grundsätzlich möchte ich apply aufrufen, wenn die Richtlinie verknüpft ist. So habe ich versucht, apply(element.val()) am Ende der link Funktion hinzuzufügen, aber die element.val() ist immer leer.

Ich denke, ich sollte einen anderen Lebenszyklus-Hook verwenden, um diese Methode aufzurufen, kann sie aber nicht finden. Eine mögliche Lösung kann compile anstelle von link sein, aber da ich keine DOM-Transformation mache, sollte dies nicht erforderlich sein.

Ich habe versucht aber wieder ist der Eingabewert leer.

Wie kann ich die Ansichtslogik anwenden, wenn eine Direktive verknüpft ist?

Danke

Antwort

0

Mit $ observe funktioniert gut.

attrs.$observe('ngModel', function(value){ 
    apply(modelCtrl.$modelValue); 
}); 

(Meine apply Funktion falsch war und returned 'undefined' für alle Werte.)