En cliquant sur une case à cocher avec ng-cliquez sur ne pas mettre à jour le modèle
Cliquant sur une case à cocher et de l'appel de ng-click: le modèle n'est pas mis à jour avant ng-cliquez sur coups de pied dans la case de valeur est à tort présenté dans l'INTERFACE utilisateur:
Cela fonctionne dans AngularJS 1.0.7 et semble cassé dans Angualar 1.2-RCx.
<div ng-app="myApp" ng-controller="Ctrl">
<li ng-repeat="todo in todos">
<input type='checkbox' ng-click='onCompleteTodo(todo)' ng-model="todo.done">
{{todo.text}}
</li>
<hr>
task: {{todoText}}
<hr><h2>Wrong value</h2>
done: {{doneAfterClick}}
et du contrôleur:
angular.module('myApp', [])
.controller('Ctrl', ['$scope', function($scope) {
$scope.todos=[
{'text': "get milk",
'done': true
},
{'text': "get milk2",
'done': false
}
];
$scope.onCompleteTodo = function(todo) {
console.log("onCompleteTodo -done: " + todo.done + " : " + todo.text);
$scope.doneAfterClick=todo.done;
$scope.todoText = todo.text;
};
}]);
Cassé Violon w/Angulaire 1.2 RCx
- http://jsfiddle.net/supercobra/ekD3r/
De travail fidddle w/Angulaire 1.0.0
- http://jsfiddle.net/supercobra/8FQNw/
- Ce n'est pas de travail?
- Également cassé pour moi, maintenant que j'ai mis à jour Angulaire à 1,2+
- Brisé dans 1.2.7!
- Également cassé en v1.2.24.
Vous devez vous connecter pour publier un commentaire.
Comment sur la modification de
à
De docs:
Comme indiqué dans https://github.com/angular/angular.js/issues/4765, le passage de ng-cliquez pour ng-changement semble résoudre ce problème (je suis en utilisant Angulaire 1.2.14)
L'ordre dans lequel
ng-click
etng-model
sera exécutée est ambigu (puisque ni de définir explicitement leurpriority
). Le plus stable de la solution à ce problème serait d'éviter de les utiliser sur le même élément.Aussi, vous ne voulez probablement pas le comportement que le montrent les exemples, vous voulez le
checkbox
de répondre aux clics sur le le texte de l'étiquette, non seulement la case à cocher. Par conséquent, la solution la plus propre serait pour envelopper leinput
(avecng-model
) à l'intérieur d'unlabel
(avecng-click
):De travail exemple: http://jsfiddle.net/b3NLH/1/
Pourquoi ne pas vous utiliser
Ou une autre solution serait de définir la
todo.done
à l'intérieur de la ng-cliquez sur rappel et de n'utiliser ng-cliquez suret
Remplacement de ng-modèle avec ng-vérifié qui fonctionne pour moi.
Il est une sorte de hack mais en l'enveloppant dans un délai semble accomplir ce que vous êtes à la recherche pour:
De la commande entre
ng-model
etng-click
semble être différent et c'est quelque chose que vous ne devriez probablement pas compter sur. Au lieu de cela, vous pourriez faire quelque chose comme ceci:Et votre script:
Ce qui est différent ici est à chaque fois que vous cliquez sur une case, il définit cette zone comme ce qui est "actuel" et ensuite afficher ces valeurs dans la vue. http://jsfiddle.net/QeR7y/
Solution de: https://groups.google.com/forum/#!topic/angulaire/7Nd_me5YrHU
#t=5m08s
dans votre lien YouTube de sorte qu'il n'est pas nécessaire de regarder la vidéo complète. Voir mattcutts.com/blog/link-to-youtube-minute-secondJe viens de remplacer
ng-model
avecng-checked
et il a travaillé pour moi.Ce problème a été lorsque j'ai mis à jour mon angulaire de la version de
1.2.28
à1.4.9
Également vérifier si votre
ng-change
est à l'origine de tout problème ici. J'ai dû enlever monng-change
comme-bien à le faire fonctionner.