【问题标题】:ng-repeat inside of ng-repeat- filters not workingng-repeat-过滤器内的ng-repeat不起作用
【发布时间】:2016-05-05 01:04:39
【问题描述】:

我在两列中显示 ng-repeat 内容。

使用此代码可以正常工作:

        <div class=storerow ng-repeat="store in stores track by $index" ng-if="$index%2==0">
            <div ng-repeat="i in [$index,$index+1]" ng-if="stores[i]!=null" class="ngrepeatstore">
                    <div class="image-container" style="background-image: url({{stores[i].image}})" ng-click="tileClicked({{stores[i].id}})">
                    </div>
        </div>

但是,当我添加一个过滤器时,它会破坏 NG 重复并且不显示任何内容:

        <div class=storerow ng-repeat="store in stores track by $index" ng-if="$index%2==0">
            <div ng-repeat="i in [$index,$index+1] | filter: greaterThan('order', 0) | orderBy:'order'" ng-if="stores[i]!=null" class="ngrepeatstore">
                    <div class="image-container" style="background-image: url({{stores[i].image}})" ng-click="tileClicked({{stores[i].id}})">
                    </div>
        </div>

大于的 .js

    $scope.greaterThan = function(prop, val){
    return function(item){
      return item[prop] > val;
    }}

我尝试将过滤器添加到第一个 ng-repeat- 但是这不起作用,因为它只是将过滤器应用于整体内容(即,如果只有一个项目大于 0,它会显示所有项目 - 而不仅仅是那些大于 0)。

【问题讨论】:

  • 尝试删除“orderBy”过滤器只是为了隔离原因是否来自“greaterThan()”过滤器。我们可以查看您的“greaterThan()”代码吗?或者您可以设置一个示例小提琴吗?
  • 我的大于代码已添加。我删除了“orderBy”过滤器,但仍然没有内容出现。

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


【解决方案1】:

这是因为您实际上是在告诉 Angular 过滤 [$index, $index + 1] 上的属性 order,这是一个由两个整数组成的数组,这是没有意义的。

I.E.当您的代表比较 index.prop &gt; val 时,您真正在做的是比较 index['order'] &gt; someValue

此 Plunker 演示:http://plnkr.co/edit/FkSrmZuuK4B1ToGNgAnq?p=preview 您需要将 filter:greaterThan(prop, val) 移动到父 ng-repeat。只有在那里你的过滤器才能工作。

<div ng-repeat="store in stores | filter:greaterThan2('id', 0) | orderBy:'name'" ng-if="$even">
  {{store.name}}
  <div ng-repeat="i in [$index, $index+1] | orderBy:angular.identity:true" ng-if="stores[i] !== null">
    <strong>store.id</strong> {{i}}
  </div>
</div>

【讨论】:

  • 这不是在两列中显示数据,因为我需要它并且 orderBy 没有影响
  • 我只是在展示您的过滤器中的错误。我不知道您的数据是什么样的以及您想要实现的目标。您将不得不自己解决剩下的问题。
  • 数据长这样 {image:"green", order:2},{image:"blue", order:3},{image:"yellow", order:1}跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 2015-11-21
相关资源
最近更新 更多