Angularjs 指令、链接函数、数组、数据绑定顺序不明确

Angularjs 指令、链接函数、数组、数据绑定顺序不明确,angularjs,angularjs-directive,angularjs-scope,2-way-object-databinding,angular-controller,Angularjs,Angularjs Directive,Angularjs Scope,2 Way Object Databinding,Angular Controller,我有一个非常具有挑战性的问题,我甚至不知道如何定义,所以我将举一个例子,希望你们能够解释我做错了什么。 我的HTML是: <tr ng-repeat="object in Objects"> <td> <div table-checkbox row-index="{{$index}}" bind-model="selectedChecks[$index]" selected-Checks="selectedChecks">

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

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

       </div>
    </td>
</tr>
问题是,选中第一个复选框时,警报将输出:true undefined 从现在开始第二次选中/取消选中任何复选框,并拥有输出:true false和false true

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

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

否,在数据绑定之前checkIt函数未运行。第一次检查第一个参数时得到true undefined的原因是$scope.selectedChecks={}为空。这意味着没有类似于:

$scope.selectedChecks = {
    0: false
};
因此,当您选中第一个复选框时,ng model=bindModel将更新$scope.selectedChecks={}如下所示:


其他复选框也一样。

您好,您能为我们提供plunker/jsfiddle吗。或者告诉我们$scope中的数据是什么。selectedChecks={}?是的,它保存键值pare,其中键是当前的$index,并且值是真或假,这是来自checkboxng model=bindModel的角度数据绑定的结果。确保每次选中复选框时,它都将真或假绑定到$scope。selectedChecks[$index]我知道,问题不是为什么它没有定义,而是为什么它们都不是真的?它们应该指向该pointscope处的同一变量。bindModel来自HTML中指令标记中的bind model=selectedChecks[$index]。这意味着它应该指向作用域。selectedChecks[i]它们指向同一个变量,但它们不同时为真的原因是当您选中第一个复选框时。例如,ng change将更新ng model的值。因此,bindModel的值将为真。由于您指定了双向绑定,bindModel将尝试使用新值更新selectedChecks。但正如我提到的,selectedChecks没有0:false属性,因此,当您第一次调用selectedChecks[I]时,您将得到未定义的属性。在这里,angular将创建属性并分配值,以便下次获得正确的输出。谢谢Ali,但正如我提到的,我从未获得正确的输出,它们总是彼此相反。我现在认为,如果您能够创建plunker/JSFIDLE,那么很高兴看到您的案例付诸实施。
$scope.selectedChecks = {
    0: false
};
$scope.selectedChecks = {
  0: true
}