2015-09-19 50 views
4

AngularJSlimitTo:在AngularJS不工作

userData.success(function (userdataobject) { 
        $scope.catadata = userdataobject; 
       $scope.quantity = 1; 
      }); 
      userData.success(function (userdataobject) { 
        $scope.catadata1 = userdataobject; 
       $scope.quantity1 = 1; 
      }); 

AngularJS 2个不同循环代码

环路1

<div ng-repeat="cat in catadata | limitTo:quantity | filter: {TopCategoryID : 11}"> 

回路-2

<div ng-repeat="cat1 in catadata1 | limitTo:quantity1 | filter: {TopCategoryID : 12}"> 

limitTo:quantity是工作,但limitTo:quantity1不起作用

+0

我使用limitTo:在过滤器之后,现在它的工作 –

回答

5

TLDR:您必须将limitTo过滤器移动到结束:

<div ng-repeat="cat1 in catadata1 | filter: {TopCategoryID : 12} | limitTo:quantity1"> 

limitTo filter将创建具有所需长度的新数组,那么您的过滤器将被应用,可以这样考虑:

var catadata1 = [ 
    {TopCategoryID: 13, ...}, 
    {TopCategoryID: 42, ...}, 
    {TopCategoryID: 12, ...}, 
    ... 
]; 
// When we apply the limitTo, this is what's happening: 
var limitTo = catadata1.slice(0, 1); // Keep the first item 
// And when we apply the filter we only filter on the limitTo array: 
var filter = limitTo.filter(matchItem({TopCategoryID : 12})); 

另一种方式来看待的是:

var a = [0, 1, 2]; // Initial Array 
var b = [0] // limitTo: 1 
var c = [] // filter: 2 

虽然:

var a = [0, 1, 2]; // Initial Array 
var b = [0] // limitTo: 1 
var c = [0] // filter: 0 

这是正在发生的事情在你的代码,只是另一种过滤器。

+0

谢谢,我用limitTo:过滤后:现在它的工作 –

0

可能是因为您引用了相同的数组,并且首先执行了第一个循环。尝试复制数组,然后将其分配给作用域。例如:

userData.success(function (userdataobject) { 
    $scope.catadata = angular.copy(userdataobject); 
    $scope.quantity = 1; 
}); 
userData.success(function (userdataobject) { 
    $scope.catadata1 = angular.copy(userdataobject); 
    $scope.quantity1 = 1; 
}); 

如果这没有解决您的问题,请创建一个Plunker中,你会重现的场景。

+1

请注意'.copy'会进行深层复制,这在大多数情况下是不必要的,而不是使用浅层克隆(只复制对象的最外层/ Array):对于数组,您可以简单地写:'var new_array = old_array.slice()' – andlrc

+0

是的,我完全同意。谢谢。 –