嵌套的ng-repeat $ digest()不会更新视图

时间:2014-01-13 19:25:19

标签: javascript angularjs

请帮助我了解如何更新嵌套分组ng-repeats的视图 假设我有以下模型 doc与页面有一对多的关系。

在视图中,我使用数组数组按行显示文档集合及其页面。

在控制器中我有方法添加文档的页面,但它没有更新视图

任何帮助表示赞赏。我稍后会提供代码

更新: 这是代码http://plnkr.co/edit/dGVW0QaUArf0okTJexMv

中的代码

更新

所以,从代码中,我必须以某种方式激发分组更新,但我不知道如何实现这一点。有没有办法强制角度来检查ng-repeat项目中的嵌套集合?

更新:   更新了plunk示例。

2 个答案:

答案 0 :(得分:3)

很高兴看到一些代码来理解什么更新的关系,但尝试把

 $scope.$apply(); 

在控制器中更新视图的方法中。

如果正在进行摘要周期,可能会给您一个错误,这很好,因为这意味着正在更新某些内容。

如果是这样,你可以尝试

if(!$scope.$$phase){
  $scope.$apply();
}

将检查作用域上是否正在运行$ digest,如果没有,它将运行它。

答案 1 :(得分:0)

因此,为了解决上述问题,必须将此行添加到控制器并更新标记。它将组发布到范围,并为文档集合中的每个文档循环添加观察者。

控制器:

$scope.docs.forEach(function (itm,idx) {
    $scope.$watch('docs['+idx+'].pages', function (val) {
        $scope.docs[idx].groups = $scope.groupBy(val,3);
        },true);
});

查看:

<tr data-ng-repeat-start='doc in docs' >
    <th>&nbsp</th>
    <th>{{doc.name}}</th>
 </tr>

<tr  data-ng-repeat='group in doc.groups'>

<td data-ng-repeat='page in group'>
    {{page.name}}
 </td>
</tr>
<tr data-ng-repeat-end>
    <td>&nbsp</td>
    <td ><a href='#' data-ng-click = 'addPage(doc)'>addPage</a></td>
</tr>