2016-03-22 11 views
1

Yönergemde, kapsamı, sıralamayan bir dizi değerden alıyorum ve ng-repeat ile sıralamak istiyorum. Nedeni, sıralama için özel bir ölçüt yok, sadece bazı etiketlerin istediğim sırada görüntülendiğinden emin olmak istiyorum, bu yüzden indexOf ve splice tarafından bağlantı işlevinde bir el sıralama gerçekten iyi görünmüyor.ng-repeat orderBy - Değerleri bir dizide görüntülenen değerler olarak görüntüle

Ekranda görüntülemek istediğim sıraya göre yeni bir dizi oluşturmanın ng-yinelemede bir şekilde uygulanıp uygulanmayacağını merak ediyorum.

Bir örnek benim anlamama yardımcı olabilir.

Benim direktifi

$scope.unsortedLabels // ['foo1', 'foo2', 'foo3'] Array of labels I receive from parent directive $scope.desiredLabelsOrder = ['foo3', 'foo1', 'foo2'] // The order I want the labels displayed

Benim şablon

<li ng-repeat="label in unsortedLabels | orderBy: ?? ></li>"

nasıl ilk foo3 etiketini görüntülemek için desiredLabelsOrder dizi kullanabilir, ardından foo1 ve son foo2?

size

+0

Bu şekilde olmasını istediğiniz bir sebep var mı? – Zamboney

+0

Arka uç bana bir sürü etiket döndürüyor. Sıralı olup olmadıklarını ve hepsinin var olup olmadığını garanti edemem. Ng-repeat + orderBy'nin varolan etiketleri benim için sıralayabileceğimi düşündüğüm tek alternatif olarak, bağlantı fonksiyonundaki etiketleri elle sıralamak olduğunu ve bunun çok şık olduğunu sanmıyorum. – JulioDeL

+0

bu yüzden sipariş ver ... – Zamboney

cevap

1

durum garip ederiz ama mutlaka özel bir filtre yaparak açısal bunu tasarlayabilirsiniz.

Working Fiddle

angular.module('myApp',[]).filter('myFilter', function(){ 
    return function(items, newArrangement){ 
     console.log(newArrangement) 
     var arrayToReturn = []; 
     newArrangement.forEach(function(item,index){ 
      arrayToReturn[newArrangement[item-1]] = items[index]; 
     }) 

     console.log(arrayToReturn) 
     return arrayToReturn; 
    }; 
}); 

Ve ng-repeat sadece

<li ng-repeat="label in unsortedLabels | myFilter: [3,1,2] ></li> 

Çıkışlar gibi yeni düzenleme tanımlamak zorunda

foo3

f kullanmak oo1

foo2

yardımcı olur Umut.

İlgili konular