0

如果您检查以下 jsfiddle,您将看到我遇到的问题的示例。

http://jsfiddle.net/Yram7/1/

我的问题是,当一个 ng-repeat 有一个非常简单的数据类型来驱动它时,例如一个数字数组,例如[1..10]当数组更新时,angularjs 不知何故知道数据值没有改变,因此不会重绘行 DOM。这意味着诸如下拉框之类的 UI 片段可以与 setInterval 结合使用,从而导致数据刷新。

一切都很好。

但是,如果我更改 ng-repeat 后面的数据结构以包含复杂对象,例如[{"i" : 1}..{"i" : 10}]angularjs 会完全重绘该行(即使值没有改变,尽管对象引用当然有),因此如果选择了下拉菜单,则html 通过重新绘制行被破坏,因此用户选择的 UI 体验很差。

尝试摆弄选择选项并单击下拉箭头以了解我的意思。

是否有可能以某种方式阻止这种行为,以便 DOM 仅在发现行数据值发生某种变化时才重绘?

4

1 回答 1

4

在您的小提琴中,您使用的是 Angular 的蚂蚁古董版本。较新的版本在( docs )中有该track by子句。ng-repeat

这是你的小提琴分叉,它用它实现它track by并且它有效:http: //jsfiddle.net/BFFJn/

track by子句将迭代对象的身份与 DOM 相关联,因此当找到具有相同 id 的(可能不同的)对象时,DOM 会被更新,而不是被替换。如果没有track by给出,则使用对象相等。

于 2013-11-07T14:00:19.123 回答