Wie greife ich von einer Anweisung auf das untergeordnete ngModel zu?

8

Wie in diese Frage , möchte ich .error für das übergeordnete Element .control-group eines Formularfelds hinzufügen, wenn scope.$invalid wahr ist.

Wenn Sie jedoch den Formularnamen wie in ng-class="{ error: formName.fieldModel.$invalid }" fest codieren, bedeutet dies, dass ich das nicht in verschiedenen Formularen wiederverwenden kann. Außerdem würde ich diese Deklaration lieber nicht überall wiederholen.

Ich dachte mir, dass eine Direktive, die ungefähr so ​​aussieht, funktionieren könnte:

%Vor%

Wenn also model1 oder model2 nicht gültig ist, wird .control-group .error hinzugefügt.

Mein Versuch hier . Kann man aufgrund der Modellnamen von der Direktive auf die Modelle zugreifen?

Wenn es einen besseren Ansatz gibt, würde ich es auch gerne hören.

    
thatmarvin 20.04.2013, 01:14
quelle

3 Antworten

5

Ich denke nicht, dass das Schreiben einer benutzerdefinierten Anweisung für diesen Anwendungsfall wie die ng-form -Direktive erforderlich ist wurde genau für Situationen wie diese erstellt. Aus der Dokumentation der Richtlinie:

  

Es ist nützlich, Formulare zu verschachteln, zum Beispiel wenn die Gültigkeit einer Untergruppe gilt   von Kontrollen muss bestimmt werden.

Wenn Sie Ihren Code als Beispiel nehmen, würde man schreiben:

%Vor%

Mit dieser Technik müssen Sie die in ng-model verwendeten Ausdrücke nicht wiederholen und können dieses Fragment in jeder Form wiederverwenden.

    
pkozlowski.opensource 20.04.2013, 07:18
quelle
2

Sie können auch das Markup in der akzeptierten Antwort ändern, um auf die Verschachtelung zu verzichten, da ng-form ebenfalls eine Klassendefinition ist:

%Vor%

Endgültige Lösung Geige

    
thatmarvin 21.04.2013 02:12
quelle
1

Innerhalb Ihrer Link-Funktion können Sie auf den formController zugreifen. Es hat alle Steuerelemente. Im Folgenden erhalten Sie daher Zugriff auf .$valid :

%Vor%

Allerdings weiß ich nicht, wie ich das für Änderungen beobachten soll. Ich habe versucht, attrs.errorOn zu beobachten (dh die Eigenschaft ng-model zu beobachten), aber die Uhr wird nur ausgelöst, wenn ein gültiger Wert eingegeben wird (wegen der Art und Weise, wie eckige Formulare funktionieren ... es sei denn, dieser Wert ist gültig) der von ng-model festgelegten Bereichseigenschaft zugewiesen.)

Geige .

Vielleicht kann jemand das weiter machen ...

    
Mark Rajcok 20.04.2013 02:14
quelle