【问题标题】:ngRepeat and filtering list based on collection valuengRepeat和基于集合值过滤列表
【发布时间】:2016-04-26 09:47:42
【问题描述】:

下面是我通过ng-repeat 运行的数据示例。是否可以通过 ngRepeat 运行它,但只能在 HTML 中 lineNum >= 1lineNum <= 10 的位置运行?我可以通过创建单独的变量并使用另一个插件(如 linq.js)来做到这一点,但希望避免这种情况。

{
    "00100":{ lineNum: 1.00, Columns: {..} }
    "00200":{ lineNum: 2.00, Columns: {..} }
    "02000":{ lineNum: 20.00, Columns: {..} }
    "20000":{ lineNum: 200.00, Columns: {..} }
}

【问题讨论】:

标签: angularjs angularjs-ng-repeat filtering ng-repeat


【解决方案1】:

不确定,您的数据类型是什么,但有如下数据列表:

var records = {
    lineNum: 1.00, Columns: {..},
    lineNum: 2.00, Columns: {..},
    lineNum: 20.00, Columns: {..},
    lineNum: 200.00, Columns: {..},
};

你可以这样写:

<div ng-repeat="record in records" ng-if="record.lineNum >= 1 && record.lineNum <= 10">{{record.lineNum}}
</div>

这是一种解决方法,因为您想在 HTML 本身中进行操作。

【讨论】:

  • 必须使用对象重复语法:(k, v) in obj
  • 是的,我根据示例进行了解释 :) 将更新该答案,并且可能我会删除我的答案,因为您和我的答案将变得相同 :-)
【解决方案2】:

是的,只需在 ngRepeat 元素上使用 ng-if。我还假设您的数据有语法错误,并假设它看起来像:

$scope.myData = {
    "00100":{ lineNum: 1.00, Columns: {..} }
    "00200":{ lineNum: 2.00, Columns: {..} }
    "02000":{ lineNum: 20.00, Columns: {..} }
    "20000":{ lineNum: 200.00, Columns: {..} }
}

还有 HTML

<div ng-repeat="(key, value) in myData" ng-if="value.lineNum > 1 && value.lineNum < 10">
    {{key}}
</div>

【讨论】:

  • 这不是有很多开销吗?这只是一小部分数据(我更新了我的原始数据,我确实有语法错误)。我不反对编写自定义过滤器,我只是不想在控制器加载时将集合拆分为多个变量
  • @collinszac10——你根本没有拆分集合——如果有的话,开销会更少。如果条件不满足,ngIf 甚至不会将内容附加到 DOM。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多