Odniosłem się do tego, zanim zadałem to pytanie.
AngularJs nie wiąże ng-check z ng-model
Jeśli ng-checked
jest oceniany jako true
po html
stronie, ng-model
nie jest aktualizowany. Nie mogę, ng-repeat
jak zasugerowano w powyższym pytaniu, ponieważ muszę użyć stylu dla każdego pola wyboru.
Oto plunker, który stworzyłem, aby zilustrować mój problem.
http://plnkr.co/edit/YsOsPh3vjkPMUUDa6r2t
Aby zobaczyć, czego chcę, otwórz konsolę i po prostu kliknij Submit
przycisk. Nie zaznaczaj żadnych pól wyboru.
Z góry dziękuję!
ng-checked
jest obliczany na true przez wyrażenie. Aby wskazaćng-model
, że nie jest powiązany, użyłem tam true. Podczas inicjowania kontrolera chcę, aby wszystkie pola wyboru były odznaczone. Po pewnym żądaniu Ajax obliczam,ng-checked
aby zaznaczyć pole wyboru. To jest, gdy mójng-model
nie jest aktualizowany.ngChecked
. Twój model jest w porządku, wystarczy ustawićtestModel.item1 = true
wywołanie zwrotne w AJAX, a następnie zadzwonić,$scope.$apply()
aby zaktualizować widok.ng-checked
zamiastng-model
... nigdy więcej!Możesz użyć ng-value-true, aby powiedzieć kątowi, że twój model ng jest ciągiem.
Mogę uzyskać działanie wartości ng-true-value tylko wtedy, gdy dodam dodatkowe cudzysłowy w ten sposób (jak pokazano w oficjalnej dokumentacji Angular - https://docs.angularjs.org/api/ng/input/input%5Bcheckbox%5D )
ng-true-value="'1'"
źródło
To, co możesz zrobić, to
ng-repeat
przekazać wartość tego, co iterujesz, do,ng-checked
a stamtąd, wykorzystującng-class
swoje style w zależności od wyniku.Zrobiłem ostatnio coś podobnego i to zadziałało.
źródło
Can Declare As the in ng-init również staje się prawdą
<!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>
I możesz wybrać pierwszy i obiekt również tutaj pokazany true, false, flase
źródło
ngInit
. Ta dyrektywa może być nadużywana, aby dodać niepotrzebną ilość logiki do szablonów. Zobacz Dokumentacja API dyrektywy AngularJS ng-init .Te
ng-model
ing-checked
dyrektywy nie powinny być używane razemZ Dokumentów:
Zamiast tego ustaw żądaną wartość początkową ze sterownika:
<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 };
źródło
Nie potrzebujesz,
ng-checked
kiedy używaszng-model
. Jeśli wykonujesz CRUD na formularzu HTML, po prostu utwórz model dlaCREATE
trybu, który jest spójny z twoimEDIT
trybem podczas wiązania danych:Tryb CREATE: Modeluj tylko z wartościami domyślnymi
$scope.dataModel = { isItemSelected: true, isApproved: true, somethingElse: "Your default value" }
Tryb EDYCJI: Model z bazy danych
$scope.dataModel = getFromDatabaseWithSameStructure()
Następnie, niezależnie od tego,
EDIT
czyCREATE
tryb, możesz konsekwentnie używać swojegong-model
do synchronizacji z bazą danych.źródło