【问题标题】:Exclude elements in a nested array from ng-repeat without ng-if从没有 ng-if 的 ng-repeat 中排除嵌套数组中的元素
【发布时间】:2018-07-18 09:29:59
【问题描述】:

给定一个嵌套数组,我如何在 ng-repeat 中过滤这些值而不必使用 ng-if。

不使用 ng-if 的原因是我需要零值来不占用 $index,因为我需要将该索引与此视图中发生的其他事情相匹配。因此,例如这对我 atm 不起作用:

<tr ng-if="row.value[0] !== 0 || row.value[1] !== 0" ng-repeat="row in chart.values track by $index">

在下图中,例如,如果 value[0] 或 value[1] 在 Asian/Indian 下为零,则它们不应出现在 ng-repeat 中。数据如下:

【问题讨论】:

    标签: javascript angularjs multidimensional-array angularjs-ng-repeat


    【解决方案1】:

    您可以使用ng-show 并在方法中进行评估;这将保留 $index'es :

    $scope.showRow = function(row) {
      return row.value[0] !== 0 || row.value[1]!== 0
    }
    
    <tr ng-repeat="row in chart.values track by $index" ng-show="showRow(row)">
    

    更新。如果您不想保留$index'es,您可以将上面的showRow 修改为:

    $scope.showRow = function(row) {
      return !(row.value[0] == 0 || row.value[1] == 0)
    }
    

    然后将其用作filter

    <tr ng-repeat="row in chart.values | filter:showRow track by $index">
    

    因此,无论过滤掉什么,跟踪的$index'es 都将是 0,1,2,3,4...等。

    【讨论】:

    • 感谢您的建议,但未显示的内容仍在占用索引,我不希望在 ng-repeat 中对其进行评估。
    • 嘿@EdgarQuintero,我以为你想保留$index?猜猜我误解了,但是您可以通过使用 filter 来完全跳过不需要的元素。已更新答案。这是一个演示 -> plnkr.co/edit/HIMkYDD859fiyZ6a7iiv?p=preview
    【解决方案2】:

    快速建议:在您生成数组的地方执行您的业务逻辑,而不是在您的 ng-repeat 中

    类似这里,但不是更改数据源,而是进行比较:angular.js ng-repeat - check if conditional is true then use another collection

    【讨论】:

    • 谢谢,但您可以提供一个例子!漂亮请。
    • 嘿,我最终这样做了...感谢您的提示。最好从数据来源中使用您需要的数据,而不是在视图中使您的生活复杂化。
    • 很高兴这对你有用。查看一些 MVC 原则。在您的视图中不发生任何计算是一个很好的经验法则。不过,任何规则总有例外。
    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多