AngularJS limitBy取决于if-clause

时间:2016-01-15 13:57:34

标签: angularjs angularjs-ng-repeat

我试图实施以下内容:

<li ng-repeat="item in items | limitTo:item.limitOfItems track by $index">

但是,并非每个项目都定义了item.limitOfItems。如果没有定义,它根本不会运行ng-repeat。因此,我正在寻找一种方法来首先检查此项目是否已定义item.limitOfItems,如果是,请使用limitTo函数。

更新:如果属性(limitOfItems)不可用,我不希望li元素无法呈现。

通过执行以下操作,我找到了解决问题的方法: 也许我已经说错了我的问题,但我不希望

  • 元素在没有提供此属性(limitOfItems)时不会呈现。

    我找到了一种方法让它像我想的那样工作:

    <li ng-repeat="includedItem in ::currentItem.includedItems |limitTo: (currentItem.limitOfIncludedItems || 5) track by $index" class="whatsIncludedItem">
    

    但是,如果我将静态5分配给控制器中的范围变量,它就不再起作用了。有什么想法吗?

    提前谢谢!

  • 2 个答案:

    答案 0 :(得分:0)

    你误解了limitTo-filter。它说数组的第一个/最后一个x号码将重复它们。 在您的情况下,它将采用项目的前x个条目。

    have a look to this

    答案 1 :(得分:0)

    为了实现您想要的功能,您需要首先过滤未定义的内容,然后通过创建自定义过滤器然后限制来执行此操作

    HTML示例

    <ul ng-controller="myCtrl">
        <li ng-repeat="row in friends |myFilter|limitTo:1,2 ">{{row.name}}</li>
    <ul>
    

    Js App和过滤器创建

    var myApp = angular.module('myApp',[]);
    
    myApp.filter('myFilter', function() {
            return function(items) {                                     
    
                return items.filter(function(item){ return item.limitOfItems !== undefined; });
            }
        });
    
    function myCtrl($scope)
    {    
        $scope.friends = [
          {name:'John', age:25, gender:'boy'},
          {name:'Jessie', age:30, gender:'girl'},
          {name:'Johanna', age:28, gender:'girl'},
          {name:'Joy', age:15, gender:'girl'},
          {name:'Mary', age:28, gender:'girl'},
          {name:'Peter', age:95, gender:'boy'},
          {name:'Sebastian', age:50, gender:'boy'},
          {name:'Erika', age:27, gender:'girl'},
          {name:'Patrick', age:40, gender:'boy'},
          {name:'Samantha', age:60, gender:'girl'}
        ];
    }
    
    myApp.controller('myCtrl',myCtrl);