2016-04-03 11 views
5

createdAt Azalan verileri almak nasıl yapılır:ngInfiniteScroll Aşağıdaki verilere sahip Mesajları kaydetmek için Firebase kullanıyorum

createdAt: "Sun Apr 03 2016 18:32:46 GMT-0300 (BRT)" 

Ne elde etmek çalışıyorum birinci ve ardından En son mesajları elde etmektir Kullanıcı aşağı kaydırırken eskileri yükleyin.

ngInfiniteScroll kullanılarak alınan iletilerle, <div ng-repeat="post in posts | orderBy:'-createdAt'"> numaralı telefonu kullanarak sipariş verebiliyorum ancak ngInfiniteScroll eski postaları ilk önce iade etmeye devam edebiliyor. Sipariş veriyorum ama eskileri sipariş ediyorum.

ngInfiniteScroll'da aynı mantığı ("-createdAt") kullanmayı denedim, ancak etkili değildi.

var baseRef = new Firebase(FBURL).child("posts"); 
    var scrollRef = new Firebase.util.Scroll(baseRef, "createdAt"); 
    $scope.posts = $firebaseArray(scrollRef); 
    $scope.posts.scroll = scrollRef.scroll; 

Güvenlik ve kurallar:

"posts": { 
      ".read": true, 
      ".indexOn": "createdAt", 
      "$post": { 
      ".read": true, 
      ".write": true, 
      "$other": { 
       ".validate": true 
      } 
     } 
     } 
+0

Sorununuzun, Tarih nesnesi olarak değil, tarih olarak dizilmiş olarak sipariş verdiğinizi düşünüyorum. Bu cevaba bakın: http://stackoverflow.com/a/25306447/752142. – illagrenan

+0

@illagrenan SiparişimBen iyi çalışıyor ... Ya da Tarih'in değiştiğini mi söylüyorsunuz ngInfiniteScroll, "-createdAt" 'ı tanıyacaktır? – adolfosrs

+0

Yani basit ngRepeat kullanarak ngInfiniteScroll olmadan bunları yazdırırsanız, öğeleriniz doğru şekilde sipariş edilir? Ve eğer 'infinite-scroll = 'kullanırsanız' someService.nextPage() '' öğeler sipariş edilmez? Doğrumuyum? Basit bir çözüm: API'den öğeler almak, bunları servisinize/kontrol cihazınıza sipariş etmek ve daha sonra emri verilen verileri "sonsuz kaydırma =" myMethod() '') döndürmek olabilir. – illagrenan

cevap

2

Çözümünüzü buldunuz gibi görünüyor, ancak orderBy ile doğru hat borusunda çalışıyordunuz, ancak sadece biraz değiştirmeyi deneyin. orderBy:'+':true"'u kullanarak, orderBy'un bunu bir şeye göre sipariş etmek istediğinizi ve +:true'un yeni bir şey olduğu yerde sipariş vereceğini söyleyin, burada -:true altta yeni içerik siparişi verebilir. Ancak bunun için açısal dokümanlara here bakabilirsiniz. HTML tarafta taşıma nerede olursa yüzden bu ng-repeat="post in posts| orderBy:'+':true" veya benzer görünümde olacaktır:

Ama bir deneyin bu yardım umut ver.

+0

Çözümünüzün sorunu nasıl çözdüğü ile ilgili daha fazla ayrıntı nedir? – adolfosrs

+0

emin, sizin için güncelledim :) – garrettmac

+0

Ve ben thisAt desc tarafından sipariş vermek istediğimi geçiyor? – adolfosrs

1

mevcut documentations biraz daha derin baktıktan sonra çirkin bir geçici çözüm here bulabildiğim


Benim js bu oldukça fazla. Temel olarak bir zaman damgası kullanmak ve oluşturulan normal olarak (artan) almaktır. veri kaydederken

Yani şu yapıyorum: Hala daha iyi bir çözüm arayan

{ 
    createdAt: Firebase.ServerValue.TIMESTAMP, 
    createdAtDesc: 0 - Date.now() 
} 

.

İlgili konular