2016-09-29 71 views
0

我有一个列表,我想根据数字进行排序。这个数字可以是负数也可以是正数。我的想法是,从最低到最高的顺序,但数量必须是正数,负数自动隐藏。但是我想添加一个选项,例如只显示正值或全部的选择器。如果选择全部同时显示负数和正数,但对最后一个显示负数。而如果我只选择正数,则从最低到最高显示正数。它可以做到这一点?ng-repeat number by number only positive

<ion-item ng-repeat="torneo in torneos | orderObjectBy:'dias'" item="item" class="item item-icon-right" ng-click="verTorneo(torneo.torneo_id)"> 
      {{torneo.torneo_nombre}} {{torneo.dias}} 
      <i class="icon ion-ios-arrow-right"></i> 
</ion-item> 

app.filter('orderObjectBy', function(){ 
return function(input, attribute) { 
if (!angular.isObject(input)) return input; 

var array = []; 
for(var objectKey in input) { 
    array.push(input[objectKey]); 
} 

array.sort(function(a, b){ 
    a = parseInt(a[attribute]); 
    b = parseInt(b[attribute]); 
    return a - b; 
}); 
return array; 
} 
}) 

这个函数指示我从最低到最高的数字,但还没有能够拉负最后。顺序如下:

-3 
-1 
2 
10 

我要的是

2 
10 
-1 
-3 
+0

对不起,我更新了@thepio – sioesi

+0

您可以请创建小提琴 –

回答

3

你有没有试过

array.sort(function(a, b){ 
    a = parseInt(a[attribute]); 
    b = parseInt(b[attribute]); 
    var A2 = (a < 0) ? 1 : 0; 
    var B2 = (b < 0) ? 1 : 0; 
    return (A2 == B2) ? a - b : A2 - B2; 
}); 
+0

哪里定义的排序?控制器? – sioesi

+1

它更好地分享小提琴来更好地理解它 – Tester

+0

未捕获的SyntaxError:意外的数字这个错误 – sioesi

1

尝试一种定义类别“命令”定义之前,谁上台:

array.sort(function(a, b){ 
    a = parseInt(a[attribute]); 
    b = parseInt(b[attribute]); 
    var categoryA = (a < 0) 1 : 0; 
    var categoryB = (b < 0) 1 : 0; 
    return (categoryA == categoryB) ? a - b : categoryA - categoryB; 
}); 
+0

那个数组是我的torneos? – sioesi

+0

我的问题是,我在哪里定义.Sort – sioesi

1

如果您想solv e这种'角度的方式'你应该把输出数据的格式分配给过滤器

<ion-item 
    ng-repeat="torneo in torneos | yourCustomFilter" 
    ng-if="torneo.torneo_nombre > 0 || showNegatives" 
    item="item" 
    class="item item-icon-right" 
    ng-click="verTorneo(torneo.torneo_id)"> 
      {{torneo.torneo_nombre}} {{torneo.dias}} 
      <i class="icon ion-ios-arrow-right"></i> 
</ion-item> 

然后在过滤器中使用排序算法,由其他答案提供此问题。这样,当列表更新并且显示负数时,您将只需要将showNegatives设置为true即可自动调用排序。

0

您可以创建一个过滤器,其节选一个布尔值,符号,如果负值应显示或不

app.filter("sortNegFilter", function() { 
    return function(array, showNegative) { 
    if(!showNegative){ 
     array = $filter("filter")(array, function(val){ 
      return val.torneo_nombre < 0; 
     }); 
    } 
    return $filter('orderBy')(array, 'torneo_nombre'); 
    }; 
}); 

然后布尔绑定到你的观点,当检查showNeg将是真正的

<label><input type="checkbox" ng-checked="showNeg"> Show negative numbers </label> 
<ion-item ng-repeat="torneo in torneos | sortNegFilter:showNeg" item="item" class="item item-icon-right" ng-click="verTorneo(torneo.torneo_id)"> 
    {{torneo.torneo_nombre}} {{torneo.dias}} 
    <i class="icon ion-ios-arrow-right"></i> 
</ion-item>