2

我们有一些代码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-clickhttp://jsfiddle.net/8VV7N/)来完成这项工作,但我想了解发生了什么,因此我将未来的决定建立在它之上。任何人都可以对此有所了解吗?

4

1 回答 1

0

问题是优先级明确ng-click,如果您在同一个元素上定义它们,则不清楚它们将以什么顺序被触发。ng-model

例如看这个问题:Clicking a checkbox with ng-click doesn't update the model

于 2013-11-13T22:24:41.150 回答