Soru Alt nesne özelliğini temel alan ng yineleme listesini filtreleme


jsfiddle http://jsfiddle.net/KfSBq/

Alt nesneye göre, ng-yinelemeyle görüntülediğim nesneler, kendi içinde bir nesne listesi içerir ve bu alt nesnelerden birinin özelliklerine göre filtrelemek istiyorum.

Bu tek başına yapmak oldukça kolaydı. Bir hedefim var dailies, her bir date ve bir entries nesnelerin listesi:

function Ctrl($scope) {
    $scope.dailies = [{date: new Date('07/07/2013'), 
                       entries: [{category: 'A', note:'Lorem ipsum'}, 
                                 {category: 'B', note: 'Lorem ipsum'}]},
                      {date: new Date('05/02/2013'), 
                       entries: [{category: 'A', note: 'Lorem ipsum'}]}];
}

Bunları kategorilere göre filtreliyorum:

<div ng-controller="Ctrl">
        <div class="daily" ng-repeat="daily in dailies | orderBy:'-date' ">
            {{ daily.date | date:'dd/MM/y' }}
            <div class="entry" ng-repeat="entry in daily.entries | filter:{ category: 'B'} ">
                <span>{{ entry.category }}</span>, <span>{{ entry.note }}</span>
            </div>
        </div>
    </div>

Sorunum, şu anda hiç giriş içermeyen günlük nesnelerin hala görüntülendiğidir. Filtrelemeyi yapan bir durumu nasıl başarabilirim? entries bir listesi daily boş, bu daily ya görüntülenmiyor?


34
2017-07-07 17:06


Menşei


Bence kendi filtreni oluşturmalısın - Ven


Cevaplar:


İfadelerin içinde yeni kapsam üyeleri oluşturmanıza izin verilir.

Bu, filtrelenmiş bir listeyi yerel kapsamda kullanılabilecek yeni bir değişkene atamanıza olanak tanır. Bununla, filtrelenmiş listenin uzunluğunu ng-show'a geçirebilirsiniz:

<body ng-app>
  <div ng-controller="Ctrl">
    <div class="daily" 
      ng-repeat="daily in dailies | orderBy:'-date' " 
      ng-show="filteredEntries.length"
    >
      {{ daily.date | date:'dd/MM/y' }}
      <div class="entry" 
        ng-repeat="entry in filteredEntries = (daily.entries | filter:{ category: 'B'})"
      >
        <span>{{ entry.category }}</span>, <span>{{ entry.note }}</span>
      </div>
    </div>
  </div>
</body>

KEMAN

Btw, güzel soru koydu!


48
2017-07-07 17:35



Vay, bu harika! Ancak biraz sayaç, sezgisel olarak filtrelenmişEntries.length olarak göründüğünden, filtreler kullanılmadan önce kullanılır, ancak sanırım bu sadece köşeli .. - Elise
Bu havalı. Yine de, filterEntries'i, zincirden daha yüksek bir kapsam değişkenine veya örneğin rootScope'a kaydetmek için var mı? - morgs32
Çok zarif bir çözüm, aynı şeyi başarmak için yazmaya çalıştığım karmaşık döngü özel filtresinden çok daha kolay. Teşekkürler! - Nolan Lawrence
Ne yazık ki, bu çözüm aslında günlüklerin listesini filtrelemiyor, aksine sadece istenmeyen günlükleri gizlemiyor. Güzel bir çözüm, ama ben filtrelenmiş bir liste arıyordum, bu yüzden filtrelediğim "günlükler" sayısını elde edebiliyorum. - snaplemouton