Je me suis référé à cela avant de poser cette question.
AngularJs ne lie pas ng-vérifié avec ng-model
Si ng-checked
est évalué à true
du côté html
, le ng-model
n'est pas mis à jour. Je ne peux pas ng-repeat
comme suggéré dans la question ci-dessus, car je dois utiliser un style pour chaque case à cocher.
Voici le plunker que j'ai créé pour illustrer mon problème.
http://plnkr.co/edit/YsOsPh3vjkPMUUDa6r2t
Pour voir ce que je veux, s'il vous plaît ouvrez la console, et cliquez simplement sur le bouton Submit
. S'il vous plaît ne cochez aucune case.
Merci d'avance!
ngModel
et ngChecked
ne sont pas destinés à être utilisés ensemble.
ngChecked
attend une expression. Ainsi, en disant ng-checked="true"
, vous dites en gros que la case à cocher sera toujours cochée par défaut.
Vous devriez pouvoir simplement utiliser ngModel
, lié à une propriété booléenne sur votre modèle. Si vous voulez autre chose, vous devez soit utiliser ngTrueValue
et ngFalseValue
(qui ne prennent en charge que les chaînes pour le moment), soit écrire votre propre directive.
Qu'est-ce que vous essayez de faire exactement? Si vous souhaitez simplement que la première case à cocher soit cochée par défaut, vous devez modifier votre modèle - item1: true,
.
Modifier: vous n'êtes pas obligé de soumettre votre formulaire pour déboguer l'état actuel du modèle. En fait, vous pouvez simplement importer {{testModel}}
dans votre code HTML (ou <pre>{{testModel|json}}</pre>
). De plus, vos attributs ngModel
peuvent être simplifiés en ng-model="testModel.item1"
.
Vous pouvez utiliser ng-value-true pour indiquer à angular que votre modèle-ng est une chaîne.
Je ne pourrais obtenir que ng-true-value fonctionne si j’ajoutais les guillemets supplémentaires comme suit (comme indiqué dans le document officiel Angular _ - https://docs.angularjs.org/api/ng/input/input% 5Bcheckbox% 5D )
ng-true-value="'1'"
Peut déclarer que l'in ng-init se concrétise
<!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>
Et vous pouvez sélectionner le premier et le premier objet également affiché ici true, false, flase
Ce que vous pourriez faire, c’est utiliser ng-repeat
en transmettant la valeur de tout ce que vous parcourez sur le ng-checked
et à partir de là, en utilisant ng-class
pour appliquer vos styles en fonction du résultat.
J'ai fait quelque chose de similaire récemment et cela a fonctionné pour moi.
ng-model
et ng-checked
ne doivent pas être utilisées ensembleDe la documentation:
ngChecked
Définit l'attribut vérifié sur l'élément, si l'expression à l'intérieur de
ngChecked
est vérité.Notez que cette directive ne doit pas être utilisée avec
ngModel
, car cela peut entraîner un comportement inattendu.
Définissez plutôt la valeur initiale souhaitée à partir du contrôleur:
<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 };