У нас есть некоторый код в ng-click
, который сломался с версией 1.2.0-rc.3, потому что значение в области не было обновлено после щелчка. Вот урезанная версия:
HTML:
<div ng-app="" ng-controller="MyCtrl">
<input type="checkbox" ng-model="checkAll" ng-click="allChecked()"/>
<input type="checkbox" ng-model="check1"/>
<input type="checkbox" ng-model="check2"/>
<input type="checkbox" ng-model="check3"/>
<input type="checkbox" ng-model="check4"/>
<input type="checkbox" ng-model="check5"/>
<p/>
All: {{checkAll}}<br/>
1: {{check1}}<br/>
2: {{check2}}<br/>
3: {{check3}}<br/>
4: {{check4}}<br/>
5: {{check5}}<br/>
</div>
JavaScript:
function MyCtrl($scope)
{
$scope.allChecked = function() {
console.log($scope.checkAll);
if ($scope.checkAll)
{
$scope.check1 = true;
$scope.check2 = true;
$scope.check3 = true;
$scope.check4 = true;
$scope.check5 = true;
}
else
{
$scope.check1 = false;
$scope.check2 = false;
$scope.check3 = false;
$scope.check4 = false;
$scope.check5 = false;
}
}
}
Поиграйтесь с 1.2.0-rc.2: http://jsfiddle.net/73E26/
Теперь с точно такой же настройкой для 1.2.0-rc.3 (http://jsfiddle.net/LZR6j/), теперь он больше не работает должным образом. $scope.checkAll
ложно, даже если оно проверено. Таким образом, модель не обновляется до вызова прослушивателя кликов, как это было в версии 1.2.0-rc.2. Что изменилось, что вызывает это? Я обнаружил, что могу выполнить эту работу, используя ng-change
вместо ng-click
(http://jsfiddle.net/8VV7N/), но я хочу понять, что происходит, поэтому буду основывать на этом будущие решения. Кто-нибудь может пролить свет на это?
ng-click
иng-change
, благодаря которой работаетng-change
? Или это случайно, что он работает так же, какng-click
? 14.11.2013ng-change
устанавливает$watch
наexpression
дляng-model
и что$watch
запускается только после того, какng-model
обработает значение (установив его на правильное значениеfalse
). Однако, по моему опыту, лучше избегать таких договоренностей. 14.11.2013