2016-10-02 7 views
7

Tüm öğeleri, hiçbir mesaj göstermeden, ancak yüklendikten sonra yüklemeden yüklemek istiyorum. Abonede yeni bir satır yakalamak ve masaüstü bildirimlerine göstermek istiyorum. sorundurAbone olmanın mevcut tüm satırları yüklemeyi bitirip bitirmediğini nasıl kontrol edersiniz?

, bütün önceki ürün yüklü olup olmadığını kontrol etmek nasıl emin değilim ve satır yeni bir öğedir veya önceki mevcut öğeden bunu eğer.

this.items = this.af.database.list('notifications/'+this.uid+'/'); 
this.items.subscribe(list => { 
    list.forEach(row => { 
     // doing something here... 
    }); 

    // once all the rows are finished loading, then any new row, show desktop notification message 
}); 
+0

AngularFire2 bunu dahili olarak yapıyor ve gözlemlenebilir bir dizi 'satır' yayıyor. Neyin yeni olduğunu belirlemek için diziyi kendiniz incelemeniz gerekir. Bunun yerine temel Firebase API'sini kullanabilirsiniz. '('Child_added', ...)' ve 'bir kez (" value ", ...)' işlevini kullanırsanız, 'value' olayından önce aldığınız 'child_added' etkinlikleri ilk satırları temsil eder ve sonraki 'child_added' olayları yeni 'satır' içerecektir. – cartant

+0

Bunun için angular ateşleme koduna sahip bir örnek var mı? Üzerinde ("child_added") nasıl kullanılacağına dair belgeler bulamıyorum ...) – Basit

+0

Temelde [Firebase API] (https://firebase.google.com/docs/reference/js/firebase.database. Referans). Liste için [AngularFire2 kaynağı] 'nda nasıl kullanıldığını görebilirsiniz (https://github.com/angular/angularfire2/blob/2.0.0-beta.5/src/database/firebase_list_factory.ts#L102-L156) gözlemlenebilir. – cartant

cevap

0

Minimal kodu için kullanıcı lodash var.

// this varible holds the initial loaded keys 
let loadedKeys = []; 
this.items = this.af.database.list('notifications/'+this.uid+'/'); 
this.items.subscribe((list)=>{ 
    // we skip it while initial load 
    if(!_.isEmpty(loadedKeys)){ 
    // different is the new keys 
    let newKeys = _.difference(_.map(list, "$key"), loadedKeys); 
    if(!_.isEmpty(newKeys)){ 
     // ... notification code here 
    } 
    } 
    loadedKeys = _.map(list, "$key"); 
}); 
0

Aradığınız uslu RxJS yılında default Subject yaklaşımdır. Kontrol this reactiveX urlPublish Subject mermer diyagramı (RxJS yılında Subject için eşdeğeri) takip etmek.

1) like @bash replied

2 görüntülemek istediğiniz elle indeks cadı satır) bir Rx.Subject() oluşturmak ve bu sadece en yeni satırları atamak:

Yani iki basit seçeneğiniz vardır. Ardından, uygulamanızın iş akışında bu konuya abone olursunuz.

yöntem 2 avantajı yeni .subscribe meydana geldiğinde, bir önceki veri almak olmamasıdır.


Düzenleme: Ben senin özel RxJS Subject uygulamak için bir rehber olarak this codepen yazdı. Umarım yardımcı olur.

İlgili konular