【问题标题】:How to update one time binding property inside ng-repeat for an individual element如何在 ng-repeat 中为单个元素更新一次绑定属性
【发布时间】:2017-06-27 08:01:10
【问题描述】:

我有列表,它使用 ng-repeat 重复一次绑定,如下所示

<div ng-repeat="item in ::items"> 
 {{::item.name}}
</div>

当列表发生变化时,例如添加/删除,我可以通过广播 $$rebind:refresh 事件来更新项目,如下所示。

<div ng-repeat="item in :refresh:items"> 
 {{::item.name}}
</div>

来源:对于上述的做法,引用自此one time binding repeated items update

但对我来说,如果当时有更改,我想更新单个项目,在这里我可以触发相同的事件,但是有什么优雅的方法可以在不刷新整个列表的情况下更新单个项目

【问题讨论】:

  • 为什么需要一次性绑定?
  • 您可以简单地使用两种方式绑定,我相信对于少量数据它不会有很大的不同。
  • @AKA 你是对的,我们可以将它用于较小的列表。但我有大量的数据集,如果我使用两种方式绑定,性能会下降
  • 您可以将一种方式绑定到那些仅绑定一次的值,而将所有其他方式绑定到两种方式绑定。
  • 我明白这一点,但我想让每个项目属性单向绑定,而 ng-show 和 ng-hide 或 ng-if 等剩余的东西已经有两种绑定......我想在这里尽可能减少观察者。因为我将在我的应用程序中拥有大量项目

标签: javascript angularjs angularjs-ng-repeat


【解决方案1】:

这将提高性能

<div ng-repeat="item in ::items track by $index"> 
    {{::item.name}}
</div>

【讨论】:

  • 你是对的。但是对于我的应用程序跟踪 $index 将无法正常工作,因为我有拖放功能,所以一段时间后,当我重新排序时,新项目会采用以前的项目属性。
  • 是的,但是我们没有跟踪对象的值,而是使用 Angular 的内置道具进行跟踪..请尝试一下,因为当您的数组中有一个新对象时,$index 会生成新值..不知道到底有没有用,但你可以试试
猜你喜欢
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 2014-07-17
  • 2017-10-05
  • 1970-01-01
  • 2015-10-18
相关资源
最近更新 更多