【问题标题】:AngularJS: what is the usage of track by with ng-repeatAngularJS:使用 ng-repeat 跟踪的用途是什么
【发布时间】:2016-04-18 18:01:15
【问题描述】:

我是 Angular 新手,我浏览了这个文档 https://docs.angularjs.org/api/ng/directive/ngRepeat,但不了解使用 ng-option 进行逐句跟踪的目标。

这里有几个用法

<div ng-repeat="n in [42, 42, 43, 43] track by $index">
  {{n}}
</div>

<div ng-repeat="n in [42, 42, 43, 43] track by myTrackingFunction(n)">
  {{n}}
</div>

<div ng-repeat="model in collection track by model.id">
  {{model.name}}
</div>

<div ng-repeat="obj in collection track by $id(obj)">
  {{obj.prop}}
</div>

<div ng-repeat="model in collection | orderBy: 'id' as filtered_result track by model.id">
    {{model.name}}
</div>

track by 类似于 sql 中的 order by 子句?

如果是,那么我如何指定 ASC 或 DESC 之类的排序顺序?

在最后一个 code track by 和 orderBy 都使用....他们在做什么。不清楚会出现什么样的输出。

orderBy 和 track by 有什么区别?

orderBy 是我知道的过滤器。所以 track by 也是一个过滤器。

我知道我在问非常基本的问题。基本上在这里发布,因为从文档中阅读后事情还不清楚。寻找一些帮助和示例来了解 track by 的作用?

track byorderby 在用法上有何不同?

【问题讨论】:

标签: angularjs


【解决方案1】:

默认 orderBy 将按升序排列。您可以使用“reverse”进行降序,例如

在 HTML 模板绑定中

{{ orderBy_expression | orderBy : 表达式 : 反向}}

在 JavaScript 中

$filter('orderBy')(数组,表达式,反向)

如果您确实需要重复重复项目,您可以使用逐个表达式的跟踪替换默认跟踪行为。

例如,您可以使用特殊作用域属性 $index,通过集合中每个项目的索引来跟踪项目:

`<div ng-repeat="n in [42, 42, 43, 43] track by $index">

 {{n}}

</div>`

【讨论】:

  • 你能看到 mu 贴出的代码,帮助我理解第 4 组和第 5 组代码的含义。
  • 在模型对象中,如果您的 id 属性是唯一的并且可能是 name 属性重复,则适用于这种情况
    {{model.name }}
  • 如果在“obj”对象中没有属性是唯一的,那么去
    {{obj.prop}}
  • 如果你想通过 id 属性跟踪和按 id 属性排序,那么去
    { {model.name}}
    它会先升序排序然后它会做跟踪
  • 如需更清晰的信息,请访问stackoverflow.com/questions/22761340/…
【解决方案2】:

ngRepeat 使用一个函数来“跟踪”集合中的所有项目及其对应的 DOM 元素

如果一个新项目被添加到集合中,ngRepeat 将知道所有其他项目已经有 DOM 元素,并且不会重新渲染它们。

See the detail

如果您有 ngRepeat 的对象并且它有任何标识字段(如主键值或唯一值),请在跟踪依据中使用它。

好消息是,如果您重新加载列表,dome 不会重新渲染现有项目,而只会重新渲染新项目。

【讨论】:

  • 给我看一个例子,通过它我可以理解 track by 对 ng-repeat 的作用。
  • 我已经访问过您提供的链接,但不清楚 track by 和 orderby 是做什么的?
  • 您的问题中已经有示例,假设您要再添加一个值 60(在您的第一个示例中),那么 Angular 将不会渲染该项目的其余部分,因为它已经存在,它只会添加再来一个 60。
  • 在回复任何人或任何事情之前阅读,很难说服你。
猜你喜欢
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 2023-04-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
相关资源
最近更新 更多