AngularJS 1.2.0-rc.3改变了什么,阻止ng-click拥有正确的模型值?

时间:2013-11-13 21:27:31

标签: javascript angularjs angularjs-ng-click

我们在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是错误的,即使已经过检查。因此,在调用click侦听器之前,模型没有像1.2.0-rc.2那样进行更新。是什么改变了导致这种情况?我发现我可以使用ng-change代替ng-clickhttp://jsfiddle.net/8VV7N/)来完成这项工作,但我想了解发生了什么,以便我将来做出决定。任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

问题在于ng-clickng-modelambiguous priority,如果您在同一元素上定义它们,则不清楚它们将按什么顺序触发。

例如,请参阅此问题:Clicking a checkbox with ng-click does not update the model