2013-10-25 30 views
43

Sonuç kümelerimi sabit bir sayıyla sınırlamaya çalışıyorum. limitTo'u ng-repeat ile kullanabilirim, ancak bu, geçerli görünürlüklerinden bağımsız olarak öğeleri sınırlar ve öğeleri DOM'dan kaldırır. DOM'ta her şeyi saklarken görünür birkaç öğeyle sınırlamak istiyorum.ng-repeat ve limitTo kullanarak görüntülenen görünür öğe sayısını sınırlamak için

İşte sahip olduğum geçerli kod. Hedefim, her zaman items 500 öğe içeriyor olsa da listede en fazla 50 öğe göstermektir.

<div ng-repeat="item in items | limitTo: 50"> 
    <div ng-show="item.visible"> 
    <p>item.id</p> 
    </div> 
</div> 

Bu başlangıçta 50 öğelere sınırlar, ama (bazı öğeler üzerinde item.visible değiştirerek) listeye filtre varsa, liste asla 50 aralığında öğeleri gösterir - 500 yerine 50'den az görüntüler öğeler. ng-repeat'u sınırlamanın doğru yolu nedir, böylece yalnızca görünen öğeleri sınırlama sınırlamasına doğru mu sayılır?

cevap

64

Sen kullanabilirsiniz:

<div ng-repeat="item in items | filter:{visible: true} | limitTo: 50"> 
    <p>{{item.id}}</p> 
</div> 

filter:{visible: true} Sen hakkında daha fazla bilgi için angularjs docu bir göz alabilir

tüm görünür öğelerin listesini döndürür filtre filtresi. http://docs.angularjs.org/api/ng.filter:filter

+1

Bu, filtreler öğeden kaldırıldığında (ng-show gibi) yalnızca görünürlük değiştirilmek yerine, öğelerin DOM'dan kaldırılmasıyla aynı şey değildir. Ng-show ile çalışan bir çözüm arıyorum. – Bill

+0

Gizli öğeleri DOM'da tutmak için nedeniniz nedir? – bekite

+0

Sürekli ekleme ve çıkarma işlemi yavaş. Ng-show ile filtreleme deneyimi anlıkdır, ng ile eğer güncel sonuçlar gösterilmeden önce hafif bir hıçkırık varsa. – Bill

1

Birkaç yaklaşım var, belki de en çok yeniden kullanılabilir, öğelerinizde görünür nitelikler arayan kendi 'görünür' özel filtrelerinizi oluşturmak sizin için. O zaman onları zincirleyebilirsin.

<div ng-repeat="item in items | visible | limitTo: 50"> 

Here's a SO link to create custom filters

+0

DOM'dan öğeleri kaldırmayan bir çözüm var mı? Ng-show ile çalışan bir şey arıyorum. – Bill

15

O bu şekilde yapmak da mümkündür:

<div ng-repeat="item in items" ng-show="$index<50"> 
    <p>item.id</p> 
</div> 
+1

Bu yöntem, HTML'yi fiziksel olarak yerine koyar. 2000 kayıtlarınız varsa, HTML'nize 2000 tanesini düşürdünüz ancak görünmeyecek. 'ng-if', html yerine yorumları dökeceğinden biraz daha iyi, ancak belgeye fazladan içerik yazdırmayacak şekilde limitTo’yu kullanmak daha iyi olurdu. –

1

DOM ekranı belirtmek için $ indeksi ile ng-eğer kullanabilirsiniz. Yine de yorumlar üretir, ancak nesneyi yüklemez, bu yüzden çok gelişmiş performans fark edilir.

<div ng-init="your.objects={{},{},{}}; your.max=10"> 
    <div ng-repeat="object in your.objects" ng-if="$index<your.max"> 
    {{object}} 
    </div> 
</div> 
İlgili konular