栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何循环通过ng-repeat函数返回的项目?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何循环通过ng-repeat函数返回的项目?

简短的回答
:您真的需要这样的功能还是可以使用属性?http://jsfiddle.net/awnqm/1/

长答案

为简单起见,我仅描述您的情况-ngRepeat对象数组。另外,我将省略一些细节。

AngularJS使用脏检查来检测更改。当应用程序启动时运行

$digest
$rootScope
$digest
将对作用域的层次结构进行深度优先遍历。所有范围都有手表清单。每个手表都有最后一个值(最初是
initWatchVal
)。对于所有手表的每个作用域,
$digest
它都会运行,获取当前值(
watch.get(scope)
)并将其与进行比较
watch.last
。如果当前值不等于
watch.last
(始终用于第一次比较),则
$digest
设置
dirty
true
。如果处理所有范围,
dirty== true
$digest
则从开始另一个深度优先遍历
$rootScope
$digest
当脏== false或遍历次数==
10时结束。在后一种情况下,错误“达到10 $ digest()迭代”。将被记录。

现在大约

ngRepeat
。对于每次
watch.get
调用,它将来自集合(返回值
getEntities
)的对象与其他信息一起存储在缓存中(
HashQueueMap
hashKey
)。对于每个
watch.get
调用,
ngRepeat
尝试通过其
hashKey
缓存获取对象。如果它在缓存中不存在,则将其
ngRepeat
存储在缓存中,创建新的作用域,在其上放置对象,创建DOM元素,等等。

现在大约

hashKey
。通常
hashKey
是由生成的唯一编号
nextUid()
。但这可以起作用。
hashKey
生成后存储在对象中以供将来使用。

为什么您的示例会产生错误
:函数

getEntities()
总是返回带有新对象的数组。该对象
hashKey
ngRepeat
缓存中不存在也不存在。因此
ngRepeat
,每个
watch.get
手表都会为for生成新的作用域
{{entity.id}}
。这只手表先
watch.get
watch.last== initWatchVal
。这样
watch.get()!=watch.last
。因此
$digest
开始新的遍历。因此
ngRepeat
用新的手表创造了新的范围。所以… 10个遍历后,您会得到错误。

如何解决

  1. 不要在每次
    getEntities()
    调用时都创建新对象。
  2. 如果需要创建新对象,则可以
    hashKey
    为其添加方法。有关示例,请参见本主题。

希望知道AngularJS内部知识的人会在我做错事情时纠正我。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406499.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号