0

我有一个非常具有挑战性的问题,我什至不知道如何定义,所以我将举一个例子,希望你能解释我做错了什么。我的 HTML 是:

<tr ng-repeat="object in Objects">
    <td>
        <div table-checkbox row-index="{{$index}}" bind-model="selectedChecks[$index]" selected-Checks="selectedChecks">

       </div>
    </td>
</tr>

selectedChecks数组是这样定义控制器$scope.selectedChecks = {} 的:标记的结果是一列复选框这是我的指令代码:

return {
    restrict: 'EA',
    scope: {
        rowIndex: '@',
        selectedChecks: '=',
        bindModel: '='
    },
    template:'<input type="checkbox" ng-model="bindModel" ng-change="checkit(rowIndex)">',


    link: function(scope, elem, attrs) {
       scope.checkit = function(i){
           alert(scope.bindModel + " " + scope.selectedChecks[i]);
        };
    }
};

问题是,当第一个复选框被选中时,警报将输出:“true undefined”形成从现在开始对任何复选框的第二次选中/取消选中,并且拥有输出将是:“true false”和“false true”

我的期望是这两个变量将是相同的,因为它们应该指向相同的值,因为: scope.bindModel被发送到指令selectedChecks[$index]并且scope.selectedChecks[i]应该是相同的。请帮助我了解我在这里做错了什么。似乎checkIt函数在 Angular 在复选框和数组之间进行数据绑定之前运行。

4

1 回答 1

0

似乎 checkIt 函数在 Angular 执行复选框和数组之间的数据绑定之前运行。

不,checkIt在 Angular 执行数据绑定之前,函数没有运行。你true undefined第一次检查第一个的原因是它$scope.selectedChecks = {}是空的。这意味着没有像这样的属性:

$scope.selectedChecks = {
    0: false
};

因此,当您选中第一个复选框时,ng-model="bindModel"$scope.selectedChecks = {}像这样更新:

$scope.selectedChecks = {
  0: true
}

与其他复选框相同。

于 2015-10-10T21:14:17.890 回答