2014-07-21 38 views
16

böyle nesneleri vardır: Özel sipariş

students = {name: 'Aa_Student', class: 'A_Class'}, 
      {name: 'Ab_Student', class: 'A_Class'}, 
      {name: 'Ac_Student', class: 'B_Class'}, 
      {name: 'Ba_Student', class: 'B_Class'}, 
      {name: 'Bb_Student', class: 'C_Class'}, 
      {name: 'Bc_Student', class: 'C_Class'} 

öğrencileri karıştırılır nesnesie diyelim. Verileri göstermek için ng-repeat kullanıyorum. Nesneleri özel sıraya göre sıralamak istiyorum.
Name    Class 
----------------------------- 
Ac_Student   B_Class 
Ba_Student   B_Class 
Aa_Student   A_Class 
Ab_Student   A_Class 
Bb_Student   C_Class 
Bc_Student   C_Class 

Yani temelde, ben öğrencinin sınıfı tarafından sipariş etmek istiyorum, ama bu B_Class, ilk önce, sonra A_Class, C_Class gelir:

Örneğin, bu gibi verileri göstermek istiyorum. Ayrıca, öğrenciler tarafından alfabetik sırayla sipariş vermek istiyorum. Bunu nasıl yapabilirim?

HTML:

<table> 
    <tr ng-repeat="student in students | orderBy:customOrder"> 
    ... 
    </tr> 
</table> 

Denetleyici:

$scope.customOrder = function(student) { 
    $scope.students = $filter('orderBy')(student, function() { 

    }); 
}; 
+1

(2) Kısa verileriniz bu (1) Özel filtre yapmak için iki yol vardır kontrolör seviyesinde – dhavalcengg

+0

@dhavalcengg Bu yüzden filtreyi kullanmam gerekiyor mu? –

+1

"$ scope.studens" içindeki yazım hatası dikkat edin (t eksik) – Gamb

cevap

19

Merhaba burada bakın özel sıralama filtre uygulayıp oluşturabilir http://jsbin.com/lizesuli/1/edit

html:

<p ng-repeat="s in students |customSorter:'class'">{{s.name}} - {{s.class}} </p> 
     </div> 

angularjs filtresi:

app.filter('customSorter', function() { 

    function CustomOrder(item) { 
    switch(item) { 
     case 'A_Class': 
     return 2; 

     case 'B_Class': 
     return 1; 

     case 'C_Class': 
     return 3; 
    } 
    } 

    return function(items, field) { 
    var filtered = []; 
    angular.forEach(items, function(item) { 
     filtered.push(item); 
    }); 
    filtered.sort(function (a, b) {  
     return (CustomOrder(a.class) > CustomOrder(b.class) ? 1 : -1); 
    }); 
    return filtered; 
    }; 
}); 
+1

Tam olarak aradığım şey bu. Teşekkürler. –

+2

Merhaba, 'angular.forEach (öğeler, işlev (öğe) { filtered.push (madde); });' bu kod gereksiz görünüyor, 'vari filter = items;' demek yeterli değil – codtex

-1

sadece alıntı nesneler özelliği olarak orderBy ayarlamak için bu biçimlendirmesine özellik adı:

ng-repeat="student in students |orderBy:'name' | orderBy:'class'" 

DEMO

+0

Teşekkürler, ancak B_Class'ın ilk önce sipariş vermesini istiyorum. Alfabetik sıra değil. –

10

bu eski bilin ama için kullanışlı gelebilir diğerleri ...

Ayrıca basit bir özel sıralama işlevi de oluşturabilirsiniz. "Tam olarak değil bir filtre": Sonra

$scope.customOrder = function (item) { 
     switch (item) { 
      case 'A_Class': 
       return 2; 

      case 'B_Class': 
       return 1; 

      case 'C_Class': 
       return 3; 
     } 
    }; 

Ve istediği gibi kullanın:

<table> 
<tr ng-repeat="student in students | orderBy:customOrder"> 
... 
</tr> 

İlgili konular