【问题标题】:AngularJS Filter After One Time Binding in ng-repeat在 ng-repeat 中一次绑定后的 AngularJS 过滤器
【发布时间】:2016-12-02 20:01:10
【问题描述】:

我想知道是否可以在 ng-repeat 指令中一次性绑定一个变量,然后对该变量进行过滤。

我的代码现在不幸地在执行过滤后执行了变量的一次性绑定,尽管我需要在执行过滤之前完成绑定。

这是我的代码:

<div flex="20" ng-repeat="item in ::vm.items | filter: vm.itemSearch
    | limitTo: vm.query.limit : (vm.query.page -1) * vm.query.limit">

</div>

请记住,vm.items 是一个数组,它可能包含 20,000 个元素,因此需要一次性绑定。

过滤器用于搜索和分页。我希望能够做的事情如下:

<div flex="20" ng-repeat="item in (::vm.items) | filter: vm.itemSearch
    | limitTo: vm.query.limit : (vm.query.page -1) * vm.query.limit">

</div>

但是,由于以下错误,这不是有效的 AngularJS 语法:

语法错误:标记“:”不是表达式第 2 列的主表达式。

有人有办法绕过这个限制吗?

【问题讨论】:

  • 我建议看一下模块Bindonce 在AngularJS中的高性能绑定
  • 我已经尝试过使用它,但遗憾的是它没有任何区别。

标签: javascript angularjs ng-repeat


【解决方案1】:

我认为这实际上是不可能的。应用过滤后,任何一个时间限制值都不会改变。

您应该只将过滤后的结果传递给您的ng-repeat。性能方面,| limitTo 可以解决所有问题。你应该把它放在你的控制器内部的一个方法中——我认为你的错误来自那里的: or-operator

【讨论】:

  • 错误来自这个(::vm.items)。我需要的是让数组在 HTML 标记中可用,而不是在 Angular 摘要循环中。
  • 您应该在此处删除这些括号。我还认为,过滤控制器中的数组并将过滤后的结果传递给 ng-repeat 和 | limitTo 应该没问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
  • 2013-05-09
  • 2020-06-18
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
相关资源
最近更新 更多