【问题标题】:AngularJS conflit with limitTo and filter in ngrepeatAngularJS与limitTo冲突并在ng重复中过滤
【发布时间】:2014-11-28 09:41:58
【问题描述】:

我有一个 ng-repeat 有很多关键字 (> 100 000),这就是我使用 limitTo: 的原因,但我希望能够在 ALL 中搜索。

Search: <input ng-model="filter:queryKeywords" type="text" placeholder="Filter" autofocus>

<label ng-repeat="k in keywords | limitTo:totalDisplayed | orderBy | filter:queryKeywords">
   {{k}}
</label> 

<!-- Will load 100+ keywords -->
<button class="btn btn-primary" ng-click="seeMore()">See More</button>

问题是我的搜索只适用于我可以看到的项目。

我想搜索所有项目(即使是我无法显示的项目)。

谢谢!

【问题讨论】:

  • 这是因为模板中的过滤器,所以它只适用于渲染的元素。您需要在数据级别进行过滤,然后您也可以从那里控制限制。角度 UI 网格可能会在这里完美运行,尽管它的内置过滤器非常好并且会影响所有数据。
  • 感谢您的帮助。请你给我一个例子,不知道很好理解。
  • 考虑到关键字的数量,也许您还应该考虑在后端进行搜索并仅返回您想要的 limitTo 关键字,这样可以减少通过网络发送的数据并使前端进行处理数据也更少(当然,我假设你有一个可以修改的后端,对吧?)

标签: javascript angularjs angularjs-ng-repeat


【解决方案1】:

您应该更改过滤器的顺序,以便先搜索(因此适用于所有数据),然后再进行限制/排序:

ng-repeat="k in keywords | 
           filter:queryKeywords |
           limitTo:totalDisplayed |
           orderBy"

【讨论】:

  • @Jose 只是出于好奇,这有什么不同?
【解决方案2】:

Angular 按顺序应用过滤器。更改过滤器的顺序应该可以解决您的问题。

<label ng-repeat="k in keywords | filter:queryKeywords | limitTo:totalDisplayed | orderBy">

这意味着:首先过滤,然后将结果限制为totalDisplayed,最后排序。

【讨论】:

  • @Jose, OnurTOPAL:我刚刚注意到 Onur 在我的几分钟前发布了一个(几乎相同的)答案。我认为他的回答应该是公认的。 Onur,您的措辞略有错误:它是filters 而不是directives(指令完全不同)。请改正,以免混淆。
  • @ExpertSystem 感谢编辑。老实说,真的不在乎接受的答案以为我的有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
  • 2019-09-24
  • 1970-01-01
  • 2019-06-16
相关资源
最近更新 更多