Klicken Sie auf ein Kontrollkästchen und rufen Sie ng-click auf: Das Modell wird nicht aktualisiert, bevor ng-click aktiviert wird, sodass der Wert des Kontrollkästchens in der Benutzeroberfläche falsch angezeigt wird:
Dies funktioniert in AngularJS 1.0.7 und scheint in Angualar 1.2-RCx fehlerhaft zu sein.
<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}}
und Controller:
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;
};
}]);
Broken Fiddle mit Angular 1.2 RCx - http://jsfiddle.net/supercobra/ekD3r/
Working Fidddle mit Angular 1.0.0 - http://jsfiddle.net/supercobra/8FQNw/
Antworten:
Wie wäre es mit Veränderung
zu
Aus Dokumenten :
quelle
Wie unter https://github.com/angular/angular.js/issues/4765 berichtet , scheint der Wechsel von ng-click zu ng-change dies zu beheben (ich verwende Angular 1.2.14).
quelle
Die Reihenfolge, in der
ng-click
undng-model
ausgeführt wird, ist nicht eindeutig (da beide nicht explizit ihre festlegenpriority
). Die stabilste Lösung hierfür wäre, zu vermeiden, dass sie für dasselbe Element verwendet werden.Außerdem möchten Sie wahrscheinlich nicht das Verhalten, das die Beispiele zeigen. Sie möchten
checkbox
, dass auf Klicks auf den vollständigen Beschriftungstext reagiert wird , nicht nur auf das Kontrollkästchen. Daher wäre die sauberste Lösung, dasinput
(mitng-model
) in einlabel
(mitng-click
) zu wickeln :Arbeitsbeispiel: http://jsfiddle.net/b3NLH/1/
quelle
Warum benutzt du nicht?
Oder eine andere Lösung wäre, das
todo.done
Innere des ng-click-Rückrufs festzulegen und nur ng-click zu verwendenund
quelle
Das Ersetzen des ng-Modells durch das ng-check funktioniert bei mir.
quelle
Es ist eine Art Hack, aber das Einwickeln in eine Auszeit scheint das zu erreichen, wonach Sie suchen:
quelle
Die Reihenfolge zwischen
ng-model
undng-click
scheint unterschiedlich zu sein und darauf sollten Sie sich wahrscheinlich nicht verlassen. Stattdessen könnten Sie so etwas tun:Und dein Drehbuch:
Was hier anders ist, ist, wenn Sie auf ein Feld klicken, dieses Feld als "aktuell" festzulegen und diese Werte dann in der Ansicht anzuzeigen. http://jsfiddle.net/QeR7y/
quelle
Lösung von: https://groups.google.com/forum/#!topic/angular/7Nd_me5YrHU
quelle
#t=5m08s
in Ihrem YouTube-Link einen Sprungmarker bereitstellen würden, damit Sie nicht das vollständige Video ansehen müssen. Siehe mattcutts.com/blog/link-to-youtube-minute-secondIch habe gerade ersetzt
ng-model
mitng-checked
und es funktionierte für mich.Dieses Problem trat auf, als ich meine Winkelversion von
1.2.28
auf aktualisierte1.4.9
Überprüfen Sie
ng-change
hier auch, ob Ihr Problem auftritt. Ich musste auch meine entfernenng-change
, damit es funktionierte.quelle
quelle