Verwenden von Ausdrücken in ngModel in Angular.js

8

Geben Sie den Code in meinem Controller:

%Vor%

Wie verknüpfe ich ngModel dynamisch mit der Eigenschaft von entity , die von path ?

angegeben wird?

Ich habe so etwas versucht, aber ohne Erfolg:

%Vor%     
Slava Fomin II 15.10.2015, 16:27
quelle

4 Antworten

7

Slava, ich bin mir nicht sicher, ob das eine gute Idee ist. Aber trotzdem Sie müssen Ihr Modell getterSetter darauf aufmerksam machen, indem Sie diese Eigenschaft zu Ihrer Eingabe ng-model-options="{ getterSetter: true } hinzufügen. Dann brauchen Sie eine Funktion in Ihrem Controller, die einen GetterSetter aus einem Stachel baut.

%Vor%

So würde die resultierende Vorlage aussehen.

Glücklicherweise hat eckig einen $ parse-Dienst, der das viel einfacher macht. also müsste so etwas in Ihrem Controller sein, oder noch besser in einem injizierten Service.

%Vor%

Das wird eine Getter-Setter-Funktion zurückgeben, die dies für Sie erledigt. Sehen Sie es in Aktion in diesem Plunk

    
Sander Elias 16.10.2015, 03:41
quelle
7

Aktualisieren

Es funktioniert nicht wie erwartet, der Wert wird korrekt angezeigt, kann aber nicht geändert werden. Die richtige Lösung bietet Sander hier .

Falsche Lösung

Wow, habe es versehentlich gelöst:

%Vor%

Und hier ist das Plunk .

Ich hoffe, es wird jemandem helfen.

    
Slava Fomin II 15.10.2015 16:36
quelle
2

Sie können die Klammernotation mit einer kleinen Änderung verwenden, da Sie an eine verschachtelte Eigenschaft binden möchten. Sie müssen den Pfad auf die Eigenschaft:

aufteilen %Vor%

Controller:

%Vor%

Siehe js fiddle

    
Michael P. Bazos 15.10.2015 16:31
quelle
1

Nachdem ich die Antwort von Sander Elias gelesen und benutzt hatte, benutzte ich dies, stieß aber auf ein anderes Problem.

Wenn Sie sein Ergebnis mit ng-required="true" in <input> kombinieren, können Sie das Feld nicht leeren, denn wenn das Feld leer ist, wird newVal als undefined übergeben.

Nach einigem Nachforschen fand ich eine Frage auf GitHub , die anspricht und löst Dieses Problem.

Hier sehen Sie, wie Sander's und die GitHub-Antwort aussehen:

%Vor%

argument.length gibt die Anzahl der Werte an, die an den Getter / Setter übergeben werden, und ist 0 für einen get und 1 für einen Satz.

Abgesehen davon habe ich das angular.isDefined() als Sumit hinzugefügt vorgeschlagen in einem Kommentar , um auch false und leere ( "" ) Werte zu speichern.

Hier ist ein aktualisierter Plunker

    
Jannis Nexor Ianus Betz 02.03.2017 17:44
quelle