2016-04-03 15 views
5

sto usando Firebase per salvare i messaggi che hanno i seguenti dati:Come rendere ngInfiniteScroll recuperare i dati da createdAt Discendente

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

Quello che sto cercando di realizzare è quello di ottenere i post più recenti e poi carica quelli più vecchi mentre l'utente scorre verso il basso.

Con i post recuperati utilizzando ngInfiniteScroll, sono in grado di ordinare la descrizione utilizzando <div ng-repeat="post in posts | orderBy:'-createdAt'"> ma ngInfiniteScroll continua a restituire prima i vecchi post. Sto ordinando ma sto ordinando i più grandi.

Ho già provato a utilizzare la stessa logica ("-createdAt") in ngInfiniteScroll ma non è stato efficace.


miei js è più o meno questo:

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

Sicurezza e regole:

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

Penso che il tuo problema sia che stai ordinando per data come stringa e non come oggetto Date. Guarda questa risposta: http://stackoverflow.com/a/25306447/752142. – illagrenan

+0

@illagrenan Il mio orderBy sta funzionando bene ... O stai dicendo che cambiandolo con Date the ngInfiniteScroll riconoscerà il '" -createdAt "'? – adolfosrs

+0

Quindi i tuoi articoli sono ordinati correttamente se li stampi senza ngInfiniteScroll utilizzando il semplice ngRepeat? E se usi gli oggetti 'infinite-scroll = 'someService.nextPage()'' non sono ordinati? Ho ragione? La soluzione semplice potrebbe essere: recuperare gli elementi dall'API, ordinarli nel servizio/controller e quindi restituire i dati ordinati da 'infinite-scroll = 'myMethod()''. – illagrenan

risposta

2

Sembra che tu abbia trovato la tua soluzione, ma tu eri sulla pista giusta con il orderBy ma prova a modificarlo un po '. Prova a usare , dove orderBy dice che vuoi ordinarlo da qualcosa e lo +:true dice di ordinarlo dove qualcosa di nuovo è in cima, dove -:true direbbe ordinare nuovi contenuti in fondo. Ma puoi guardare i documenti angolari per questo here. Quindi, se in cui la manipolazione sul lato HTML sarebbe simile a questa ng-repeat="post in posts| orderBy:'+':true" o:

Ma dare una prova che, spero che aiuta.

+0

Cosa ne pensi di ulteriori dettagli su come la tua soluzione risolve il problema? – adolfosrs

+0

sicuro, lo aggiorno per voi :) – garrettmac

+0

E dove sta passando quello che voglio ordinare dal createAt desc? – adolfosrs

1

Dopo aver guardato un po 'più in profondità le documentazioni disponibili sono riuscito a trovare una brutta soluzione here.

È fondamentalmente utilizzare un timestamp negativo e recuperare il createdAt normalmente (crescente).

Così, quando il salvataggio dei dati che sto facendo quanto segue:

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

Stai ancora cercando una soluzione migliore.

Problemi correlati