【问题标题】:Handling multiple filters in angularjs在angularjs中处理多个过滤器
【发布时间】:2014-03-24 16:53:40
【问题描述】:

我正在使用 ng-repeat 在 UI 中呈现一组复杂的数据。收到数据后,我需要根据一些复选框、滑块等过滤数据。现在我将有 6 个自定义过滤器,基于时间、价格和一些复选框。我像下面这样使用它们

ng:repeat="response in searchResponse|filter:filter1(response)|filter:filter2(response)|filter:filter3(response)|filter:filter4(response)|filter:filter5(response)|filter:filter6(response)|limitTo:totalDisplayed

这很好用,但我认为这是一种应用过滤器的非常昂贵的方式。在此之后,我注意到渲染性能有相当大的滞后。有没有更好的方法在这里处理过滤器?考虑到我将来可能会有更多这样的过滤器。

请提出建议。谢谢 !

【问题讨论】:

    标签: angularjs filter angularjs-ng-repeat ng-repeat


    【解决方案1】:

    而不是链接过滤器,为什么不这样:

    ng:repeat="response in searchResponse|filter:genericFilter(response, filterConditions)|limitTo:totalDisplayed
    

    您所做的就像一个接一个地链接过滤器,这可能不一定需要 - 一个过滤器根据 filterConditions 选择结果

    【讨论】:

    • 是的,链接过滤器不好。我会试试你的建议。
    • 在我的情况下,filterCondition 将被另一个函数更改,在这种情况下我将如何应用过滤器?我需要以某种方式再次从控制器调用 genericFilter 吗?
    • 您可以使用ngModel 绑定条件,然后使用模型作为条件——或者使用模型的集合作为组合条件。 <input ng-model="searchsomething"></input> 行中的某些内容,然后可以在过滤器中访问该模型以用作 filterCondition 或其一部分。我建议你阅读一下ngModel
    • 所以基本上我所拥有的所有过滤条件最初都是针对所有不需要的数据执行的。这在渲染数据时会导致额外的时间。我在过滤器中添加了一个标志,以便第一次不应用它们。我暂时保留了链式过滤器。无论如何,谢谢,你让我在正确的方向上思考更多:)
    猜你喜欢
    • 2014-11-26
    • 1970-01-01
    • 2021-04-04
    • 2014-08-04
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2023-04-03
    相关资源
    最近更新 更多