Javascript 嵌套ng在角度不更新视图中重复

Javascript 嵌套ng在角度不更新视图中重复,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我有一些嵌套的控制器,每个都用ng repeat调用 底层项目能够通过ng click事件移除自身。此事件将拼接阵列中的项 在下面的plunkr中,如果删除第二个项(item2),那么数组将保留item1和item3,但视图将看到item1和item2。不再调用子控制器,并使用缓存的控制器 如何手动强制刷新这些控制器?难道你不应该为我做这件事吗 您当前正在通过$index进行跟踪,它不会以您想要的方式更新: 这是一个例子 我所做的唯一更改是在pitem in items track by$ind

我有一些嵌套的控制器,每个都用ng repeat调用

底层项目能够通过ng click事件移除自身。此事件将拼接阵列中的项

在下面的plunkr中,如果删除第二个项(item2),那么数组将保留item1和item3,但视图将看到item1和item2。不再调用子控制器,并使用缓存的控制器

如何手动强制刷新这些控制器?难道你不应该为我做这件事吗


您当前正在通过
$index
进行跟踪,它不会以您想要的方式更新:

这是一个例子

我所做的唯一更改是在
pitem in items track by$index
toplevel.html
)中取出
track by$index
):

测试
编辑:

当决定在
ng repeat
中更新什么时,
track by$index
将使用
$index
值作为相等性检查。这就是正在发生的事情:

  • 设置后,我们有
    [i:0,名称:'item1',i:1,名称:'item2',i:2,名称:'item3']
  • item2
    已拼接出来
  • track by$index
    查看是否有更改,并检查数组中是否仍存在值为
    0
    1
    $index
  • 它们会这样做,因此不会执行更新
  • 但是,不存在值为
    3
    $index
  • 因此,它被更新和删除

  • 是的,问题是您正在检查item.name,但您正在将更新的列表存储在pitems.name中,因此如果您从

    {{item.name}} <span ng-click="delete(items, $index)">x</span>
    
    {{item.name}}x
    

    {{pitem.name}}x
    

    这很好。

    当您可以直接使用
    ng include“'mid-level.html'”时,为什么还要使用syntacs
    ng include=“'src=“'mid-level.html'”
    呢!!!是否有任何文档说明track by没有按照我的预期工作?@MatB我添加了一个详细的分类,说明了使用
    $index
    是如何破坏预期行为的。
    {{item.name}} <span ng-click="delete(items, $index)">x</span>
    
    {{pitem.name}} <span ng-click="delete(items, $index)">x</span>