Ich habe darauf hingewiesen, bevor ich diese Frage gestellt habe.
AngularJs bindet nicht ng-checked mit ng-model
Ob ng-checked
wird auf der Seite true
zu html
gewertet, das ng-model
wird nicht aktualisiert. Ich kann nicht ng-repeat
wie in der obigen Frage vorgeschlagen, da ich für jedes Kontrollkästchen ein bestimmtes Styling verwenden muss.
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 Schaltfläche Submit
. Bitte keine Checkboxen ankreuzen.
Danke im Voraus!
ngModel
und ngChecked
dürfen nicht zusammen verwendet werden.
ngChecked
erwartet einen Ausdruck. Wenn Sie also ng-checked="true"
sagen, wird das Kontrollkästchen standardmäßig immer aktiviert.
Sie sollten nur ngModel
verwenden können, das an eine boolesche Eigenschaft Ihres Modells gebunden ist. Wenn Sie etwas anderes wollen, müssen Sie entweder ngTrueValue
und ngFalseValue
verwenden (die momentan nur Strings unterstützen) oder Ihre eigene Direktive schreiben.
Was genau versuchst du zu tun? Wenn Sie nur möchten, dass das erste Kontrollkästchen standardmäßig aktiviert ist, sollten Sie Ihr Modell ändern - item1: true,
.
Bearbeiten: Sie müssen Ihr Formular nicht senden, um den aktuellen Status des Modells zu debuggen. Übrigens können Sie einfach {{testModel}}
In Ihren HTML-Code (oder <pre>{{testModel|json}}</pre>
) Einfügen. Auch Ihre ngModel
Attribute können zu ng-model="testModel.item1"
Vereinfacht werden.
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'"
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 auswählen und das Objekt, das auch hier gezeigt wird, wahr, falsch, falsch
Was Sie tun könnten, ist ng-repeat
Weitergabe des Werts dessen, was Sie wiederholen, an ng-checked
und von dort mit ng-class
, um Ihre Stile abhängig vom Ergebnis anzuwenden.
Ich habe in letzter Zeit etwas Ähnliches gemacht und es hat bei mir funktioniert.
ng-model
und ng-checked
Direktiven sollten nicht zusammen verwendet werdenAus den Dokumenten:
ngChecked
Legt das aktivierte Attribut für das Element fest, wenn der Ausdruck in
ngChecked
wahr ist.Beachten Sie, dass diese Direktive nicht zusammen mit
ngModel
verwendet werden sollte, da dies zu unerwartetem Verhalten führen kann.
Stellen Sie stattdessen den gewünschten Anfangswert über die Steuerung 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 };