2016-04-03 14 views
5

Używam Firebase zapisać wiadomości, które mają następujące dane:Jak ngInfiniteScroll pobierać dane przez createdAt malejąco

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

Co staram się osiągnąć to, aby uzyskać najnowsze wiadomości, a potem ładuj starsze, gdy użytkownik przewija w dół.

Ze stanowiskami pobranymi przy użyciu polecenia ngInfiniteScroll Mogę zamówić desc przy użyciu <div ng-repeat="post in posts | orderBy:'-createdAt'">, ale ngInfiniteScroll w pierwszej kolejności powinien zwracać stare posty. Zamawiam, ale zamawiam te starsze.

Próbowałem już używać tej samej logiki ("-createdAt") w ngInfiniteScroll, ale nie była ona skuteczna.


Moi js jest dość dużo, to:

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

Bezpieczeństwo i zasady:

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

Myślę, że problem polega na tym, że zamawiasz według daty jako ciąg, a nie jako obiekt Date. Spójrz na tę odpowiedź: http://stackoverflow.com/a/25306447/752142. – illagrenan

+0

@illagrenan Moje zamówienie będzie działało dobrze ... Czy możesz powiedzieć, że zmieniając go na Date, ngInfiniteScroll rozpozna "-createdAt" '? – adolfosrs

+0

Twoje pozycje są uporządkowane prawidłowo, jeśli wydrukujesz je bez ngInfiniteScroll za pomocą prostego ngRepeat? A jeśli użyjesz 'infinite-scroll = 'someService.nextPage()' elementy nie są zamówione? Mam rację? Prostym rozwiązaniem może być: pobieranie elementów z API, zamawianie ich w usłudze/kontroler, a następnie przesyłanie zamówionych danych z 'infinite-scroll = 'myMethod()''. – illagrenan

Odpowiedz

2

Wygląda na to, że znalazłeś rozwiązanie, ale byłeś na dobrej drodze z orderBy, ale spróbuj trochę go poprawić. Spróbuj użyć orderBy:'+':true", gdzie orderBy mówi, że chcesz zamówić coś przez coś, a +:true mówi, że tam, gdzie wszystko jest nowe, gdzie -:true powiedziałby zamówić nową zawartość na dole. Ale możesz obejrzeć dla niego kątowe dokumenty here. Więc jeśli gdzie przenoszenia go na stronie HTML to wyglądać mniej więcej tak ng-repeat="post in posts| orderBy:'+':true" czyli

jednak podać, że spróbować, mam nadzieję, że to pomaga.

+0

Co powiesz na więcej informacji o tym, jak rozwiązanie rozwiązuje problem? – adolfosrs

+0

na pewno, aktualizuję go dla Ciebie :) – garrettmac

+0

A gdzie to mija, że ​​chcę zamówić przez createdAt desc? – adolfosrs

1

Po patrząc nieco głębiej w dostępnych dokumentacji mogę znaleźć brzydki obejście here.

Jest to zasadniczo użycie ujemnego znacznika czasu i pobranie utworzonego normalnie (rosnąco).

Więc podczas zapisywania danych Robię, co następuje:

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

Nadal szukasz lepszego rozwiązania.

Powiązane problemy