AngularJS ng-repeat - 声明性过滤器与命令式过滤器

时间:2014-10-06 21:45:42

标签: angularjs angularjs-ng-repeat

什么时候我应该使用声明式样式和Angular过滤器中的命令?

例如,我想 orderBy limitTo ng-repeat 中的某些对象数组。在这种情况下,最好在HTML代码中使用声明性内联过滤器:

var items = [
    {id:123, date:1412631216000},
    {id:328, date:1412631217000},

    … // 50 more tiny objects

    {id:553, date:1412631398000}
];

$scope.limit = 5;
$scope.items = items; // there will be 53 items, but I need only 5 of them to display on a page

<ul>
    <li ng-repeat="item in items | orderBy:'date':true | limitTo:limit">
        …
    </li>
</ul>

并且在哪些情况下值得手动过滤和限制数组?

// I usually have Lo-Dash.js or Underscore.js in all my projects

var limit = 5;

var items = [
    {id:123, date:1412631843000},
    {id:328, date:1412631217000},

    … // 50 more tiny objects

    {id:553, date:1412631398000}
];

items = _.sortBy(items, 'date');

items.reverse();

items = items.slice(0, limit);

$scope.items = items; // there will be exactly what I need for output — 5 items

<ul>
    <li ng-repeat="item in items">
        …
    </li>
</ul>

1 个答案:

答案 0 :(得分:2)

使用AngularJs,您可以使用两种方式:

  1. 使用过滤器 如果您在模板上有 ng-repeat ,那么您肯定需要使用声明性过滤器。它在这个框架中设计了非常棒的功能。 唯一的缺点是,您的数据集将通过您在每个$ digest()周期 上定义 的所有过滤器。它可能会导致一些性能问题。但无论如何,在大多数情况下,它是一个应该使用的漂亮工具。

  2. 使用自定义过滤 有时您需要在模型中预处理数据。例如,当您收到非常长的数组并且您不想使用Angular默认过滤器来处理1 000 000个条目时。在这种情况下,您可以使用某种数据光标快速对内存中的数据进行排序,然后将数据传递给Angular $ scope&lt; - &gt;查看系统。