Ich habe darauf hingewiesen, bevor ich diese Frage gestellt habe.
AngularJs bindet nicht ng-geprüft mit ng-model
Wenn auf der Seite ng-checked
ausgewertet wird , wird das nicht aktualisiert. Ich kann nicht wie in der obigen Frage vorgeschlagen, da ich für jedes Kontrollkästchen ein Styling verwenden muss.true
html
ng-model
ng-repeat
Hier ist der Plunker, den ich erstellt habe, um mein Problem zu veranschaulichen.
http://plnkr.co/edit/YsOsPh3vjkPMUUDa6r2t
Um zu sehen, was ich will, öffne bitte die Konsole und klicke einfach auf die Submit
Schaltfläche. Bitte aktivieren Sie keine Kontrollkästchen.
Danke im Voraus!
ng-checked
wird durch einen Ausdruck zu true berechnet. Um anzuzeigen, dassng-model
nicht verlinkt ist, habe ich dort true verwendet. Beim Starten des Controllers möchte ich, dass alle Kontrollkästchen deaktiviert sind. Nach einer Ajax-Anfrage berechne ich das, um dasng-checked
Kontrollkästchen zu aktivieren. Dies ist, wenn meinng-model
nicht aktualisiert wird.ngChecked
. Ihr Modell ist in Ordnung, Sie müssen nurtestModel.item1 = true
Ihren Ajax-Rückruf einstellen und dann anrufen$scope.$apply()
, um Ihre Ansicht zu aktualisieren.ng-checked
anstelle vonng-model
... nie wieder zu verwenden!Sie können ng-value-true verwenden, um Angular mitzuteilen, dass Ihr ng-Modell eine Zeichenfolge ist.
Ich könnte ng-true-value nur zum Laufen bringen, wenn ich die zusätzlichen Anführungszeichen wie folgt hinzufüge (wie in den offiziellen Angular-Dokumenten gezeigt - https://docs.angularjs.org/api/ng/input/input%5Bcheckbox%5D ).
ng-true-value="'1'"
quelle
Was Sie tun können, ist die
ng-repeat
Übergabe des Werts von allem, was Sie iterieren, an dasng-checked
und von dort ausng-class
, um Ihre Stile abhängig vom Ergebnis anzuwenden.Ich habe kürzlich etwas Ähnliches gemacht und es hat bei mir funktioniert.
quelle
Kann deklarieren, wie das in ng-init auch wahr wird
<!doctype html> <html ng-app="plunker" > <head> <meta charset="utf-8"> <title>AngularJS Plunker</title> <script>document.write('<base href="' + document.location + '" />');</script> <link rel="stylesheet" href="style.css"> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.js"></script> <script src="app.js"></script> </head> <body ng-controller="MainCtrl" ng-init="testModel['item1']= true"> <label><input type="checkbox" name="test" ng-model="testModel['item1']" /> Testing</label><br /> <label><input type="checkbox" name="test" ng-model="testModel['item2']" /> Testing 2</label><br /> <label><input type="checkbox" name="test" ng-model="testModel['item3']" /> Testing 3</label><br /> <input type="button" ng-click="submit()" value="Submit" /> </body> </html>
Und Sie können das erste und das Objekt auswählen, das auch hier gezeigt wird: wahr, falsch, flase
quelle
ngInit
. Diese Anweisung kann missbraucht werden, um Ihren Vorlagen unnötig viel Logik hinzuzufügen. Siehe AngularJS ng-init-Direktiven-API-Referenz .Die Anweisungen
ng-model
undng-checked
sollten nicht zusammen verwendet werdenAus den Dokumenten:
Stellen Sie stattdessen den gewünschten Anfangswert vom Controller ein:
<input type="checkbox" name="test" ng-model="testModel['item1']" ̶n̶g̶-̶c̶h̶e̶c̶k̶e̶d̶=̶"̶t̶r̶u̶e̶"̶ /> Testing<br /> <input type="checkbox" name="test" ng-model="testModel['item2']" /> Testing 2<br /> <input type="checkbox" name="test" ng-model="testModel['item3']" /> Testing 3<br /> <input type="button" ng-click="submit()" value="Submit" />
$scope.testModel = { item1: true };
quelle
Sie brauchen nicht,
ng-checked
wenn Sie verwendenng-model
. Wenn Sie CRUD in Ihrem HTML-Formular ausführen , erstellenCREATE
SieEDIT
während der Datenbindung einfach ein Modell für den Modus, das mit Ihrem Modus übereinstimmt :CREATE-Modus: Modell nur mit Standardwerten
$scope.dataModel = { isItemSelected: true, isApproved: true, somethingElse: "Your default value" }
EDIT-Modus: Modell aus Datenbank
$scope.dataModel = getFromDatabaseWithSameStructure()
Unabhängig davon, ob
EDIT
oder imCREATE
Modus, können Sie Ihreng-model
Synchronisierung konsistent mit Ihrer Datenbank verwenden.quelle