我试图实施以下内容:
<li ng-repeat="item in items | limitTo:item.limitOfItems track by $index">
但是,并非每个项目都定义了item.limitOfItems。如果没有定义,它根本不会运行ng-repeat。因此,我正在寻找一种方法来首先检查此项目是否已定义item.limitOfItems
,如果是,请使用limitTo函数。
更新:如果属性(limitOfItems)不可用,我不希望li元素无法呈现。
通过执行以下操作,我找到了解决问题的方法: 也许我已经说错了我的问题,但我不希望
我找到了一种方法让它像我想的那样工作:
<li ng-repeat="includedItem in ::currentItem.includedItems |limitTo: (currentItem.limitOfIncludedItems || 5) track by $index" class="whatsIncludedItem">
但是,如果我将静态5分配给控制器中的范围变量,它就不再起作用了。有什么想法吗?
提前谢谢!
答案 0 :(得分:0)
你误解了limitTo-filter。它说数组的第一个/最后一个x号码将重复它们。 在您的情况下,它将采用项目的前x个条目。
答案 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);