这组复选框需要至少选中一个才能启用提交按钮。
取消选择所有复选框会禁用该按钮。
所有复选框都使用相同的范围属性 (showRequired),将它们标记为必需。
发生的情况是,第一次单击并没有像应该那样启用按钮。选择和取消选择其他复选框会使整个事情变得混乱;无论复选框处于什么状态,在任何给定的点击上都可能会或很多不会启用该按钮。
麻烦拍摄它,我看到的是ng-valid类并不总是适用于所有复选框。有时它在一个复选框上,有时它在所有复选框上,或者它们的某种组合上。使用$timeout可以解决所有问题,但我不知道为什么,使用计时器会产生不好的代码气味。 一定会有更好的办法。
我可以手动调用验证函数以使视图与模型内联:
angular.element(document.querySelectorAll('.cb')).scope().checkBoxes()
...导致我认为我正在踩着 $digest 循环。
.
.
以下仅在使用 $timeout 时有效:
angular.module('app', []).
controller('testCtrl', function ($scope, $timeout) {
$scope.guests = [
{name:'stephen', lname:'wille'},
{name:'mary', lname:'torccaso'}
];
$scope.form = {};
$scope.form.cb = {one:false, two:false, three:false, four:false}
$scope.showRequired = true;
$scope.checkBoxes = function ()
{
console.log('checkbox');
$scope.showRequired = !($scope.form.cb.one || $scope.form.cb.two ||
$scope.form.cb.three || $scope.form.cb.four);
$scope.$apply();
};
$scope.login = function () {
console.log('login');
};
angular.element(document.querySelectorAll('.cb'))
.on('click', function () {
console.log('click');
$scope.checkBoxes();
/*
* using the $timeout solves the problem, but why?
*
$timeout(function () {
$scope.checkBoxes();
}, 0, false);
*/
});
});
$timeout 会触发另一个 $digest,但 $scoope.$apply() 也会触发。
那么给了什么?