Запретить автоматическое обновление Firebase $ firebaseArray

0

Я работаю над лентой новостей, которая похожа на ленту новостей Facebook. Я реализую его в следующей последовательности:

  1. Когда приложение запущено, получите все, но нажмите только два пункта для показа.

  2. Пользователь может прокрутить вниз, чтобы увидеть больше, и я добавлю больше в список.

  3. Если есть какие-либо новые элементы, пользователю нужно потянуть, чтобы обновить, чтобы добавить новые.

Единственная проблема, с которой я столкнулся сейчас, заключается в том, что каждый раз, когда элемент добавляется, $firebaseArray автоматически добавляет новый элемент в мой массив, который мне не нужен, чтобы изменения snyc (я хочу запросить один раз, получить список настроек). Мне было интересно, сможет ли кто-нибудь знать, как предотвратить автоматическое обновление?

Теги:
firebase
ionic-framework
angularfire

2 ответа

1

Посмотрите.once, это позволит вам получить данные только один раз: https://firebase.google.com/docs/reference/js/firebase.database.Query#once

  • 0
    Хотя once() действительно может помочь, проблема в том, что $firebaseArray() абстрагирует on() от кода OP.
  • 0
    Да, именно поэтому я не думаю, что ОП может использовать его.
Показать ещё 2 комментария
0

Вместо того, чтобы напрямую привязывать ваш $firebaseArray к представлению, клонируйте его в свойство области (или контроллера), которое будет привязано к представлению. Факторизуйте этот процесс в функции, которую вы можете вызывать, когда пользователь вытягивает-перезагружает, поэтому восстанавливается $firebaseArray.

Более подходящим подходом было бы использовать Firebase http api, с угловым сервисом $http.

Изменение: чтобы клонировать массив в область var, попробуйте следующее:

var allEvents = $firebaseArray(queryOfeverything);

allEvents.$loaded()
    .then(function(events){
        $scope.allEvents = angular.map(events, function(event) {
            return event; // you may want to replace this line - I am not very familiar with firebase.
        })
    });
  • 0
    Я уже делал что-то похожее на это, если ты это имеешь в виду. $ scope.allEvents = $ firebaseArray (queryOfeverything); $ scope.eventToDisplay = $ scope.allEvents. К сожалению, это не сработало.
  • 0
    Это потому, что вы передаете $firebaseArray , который технически является объектом javascript, по ссылке. Вам нужно сопоставить (клонировать массив с простым массивом javascript) эту переменную $ scope. Я обновлю ответ.

Ещё вопросы

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