limitTo (angularjs) или limitToFirst (firebase) не работают должным образом

0

Я пытаюсь показать последние объявления, у меня есть некоторые объявления, сохраненные в Firebase, и вы хотите отображать добавленные данные, они хранятся с свойством timestamp.

Если я создаю ng-repeat без limitTo, он работает так, как ожидалось, но когда я использую limitTo или даже limitToFirst, он работает не так, как ожидалось, он корректно отображает количество элементов, которые я собирался отображать в начале, но он пропускает некоторые из них, и когда я нажимаю кнопку loadmore, он загружает больше объявлений и отображает те, которые должны быть там с самого начала.

Обратите внимание, что в нем должны отображаться две объявления с датами 27-го октября, но она отображает только одну.

Здесь plunkr с демо: https://plnkr.co/edit/Ae8rlbD8Uob5TrAHrivz?p=preview

app.controller('publicCtrl', function($scope, $firebaseArray) {
  $scope.loadmore = 6;
  $scope.latest = "-Addate";
  var listads = new Firebase("https://milocal.firebaseio.com/Users/Ovalle");
  $scope.listads = $firebaseArray(listads);

  $scope.loadmoreads = function(){
    //console.log("Cargando anuncios");
    $scope.loadmore += 2;
    $scope.listads = $firebaseArray(listads);
    console.log($scope.loadmore);
  }

});

в HTML:

ng-repeat="ads in filteredAds = (listads | limitTo: loadmore | orderBy: latest)"

Надеюсь, кто-то может объяснить мне, что я делаю неправильно.

Благодарю.

  • 0
    Вы определенно ничего не фильтруете в своем запросе от Firebase. $firebaseArray(Firebase("https://milocal.firebaseio.com/Users/Ovalle")) загрузит всех детей из этого места. Можете ли вы указать на документацию, где определены эти limitTo и orderBy ? Таким образом, я могу понять, как это должно работать.
  • 0
    Вы начинаете с ограничения массива, фактически беря первые 6 элементов неупорядоченного массива, а затем упорядочиваете эти 6 элементов. Вы хотите обратное: сортируйте массив, чтобы он имел самый первый из первых, и отображал только 6 первых: listads | orderBy: latest | limitTo: loadmore .
Показать ещё 2 комментария
Теги:
firebase
angularfire

1 ответ

0

Я изменил ваш Plunkr на это:

var app = angular.module('plunker', ["firebase"]);

app.controller('publicCtrl', function($scope, $firebaseArray) {
  $scope.loadmore = 1;
  $scope.latest = "-Addate";
  var listads = new Firebase("https://milocal.firebaseio.com/Users/Ovalle");
  var query = listads.orderByChild("-Addate").limitToFirst($scope.loadmore);
  $scope.listads = $firebaseArray(query);

  $scope.loadmoreads = function(){
    $scope.loadmore += 2;
    var query = listads.orderByChild("-Addate").limitToFirst($scope.loadmore);
    $scope.listads = $firebaseArray(query);
  }

});

Сначала он загружает 2 элемента. Затем, когда вы нажимаете кнопку "Загрузить больше", она загружается 4. Затем 6 и т.д.

Обновлено /forked plunkr: https://plnkr.co/edit/MUMerL?p=preview

  • 0
    Единственная проблема заключается в том, что заказ не является правильным, потому что я хочу показать последние добавленные объявления, поэтому у меня есть orderByChild ("- Addate") вместо просто добавленного для обратного порядка.
  • 0
    Поиск и поиск я нашел этот пост , где объясняет , что именно мне нужно ссылку , и я пытался сохранить отрицательную отметку времени , но не смог сделать это. Если я вручную сохраню его в Firebase, то смогу видеть порядок так, как хочу, но дело в том, что я не знаю, как хранить их по коду, какой-нибудь пример?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню