использование запроса для чтения последнего значения и его изменения firebase angularjs 1

#angularjs #firebase #firebase-realtime-database #angularfire #toast

#angularjs #firebase #firebase-realtime-database #angularfire #тост

Вопрос:

У меня есть эта база данных

 service/
-KSxobYDhjUJeSvu3dC1
 -Accion:"Nueva ronda"
 -Codigo: 3
 -dateTime: 1475284727
 -notify:  0
 -num_mesa: 0
-KSxobptdYSc-qrCSbyU
 -Accion: "Orden cancelada"
 -dateTime: 1475284728
 -notify: 0
 -num_mesa: 0
  

и тогда у меня есть этот код:

 ref.orderByChild("notify").equalTo(1).limitToLast(1).on("child_added", function(snapshot) {
    var changedPost = snapshot.val();
    var mykey = snapshot.key;
    if(changedPost.notify == 1 ){
      var message = "New action "
      console.log(serviceArray[mykey].notify);//undefined
      $scope.showActionToast(message);
    } 
});
  

Этот код прочитает последнюю запись в базе данных и покажет всплывающее окно, уведомляющее о том, что в firebase вставлено новое действие. Он показывает всплывающее окно.

Моя проблема в том, что я не хочу, чтобы он отображался каждый раз, когда я перезагружаю страницу.

Итак, я подумал о добавлении простого флага, который, если он был показан в тосте, изменит notify на 0.

Моя проблема в том, что у меня есть сервис, который возвращает firebaseArray именованный serviceArray. Когда я пытаюсь получить доступ к строке, чтобы изменить значение, оно говорит undefined. Как я могу изменить значение в той же функции?

Ответ №1:

Вам будет лучше просто отслеживать временную метку последнего сообщения, которое вы показали пользователю. При этом вы можете запрашивать сообщения, которые были добавлены после этой метки времени:

 var timestampOfMostRecentlySeenMessage = null;
if (timestampOfMostRecentlySeenMessage) {
ref.orderByChild("timestamp")
   .startAt(timestampOfMostRecentlySeenMessage)
   .limitToLast(1)
   .on("child_added", function(snapshot) {
       var message = snapshot.val();
       timestampOfMostRecentlySeenMessage = message.dateTime;
   })
  

Теперь вам просто нужно поддерживать значение timestampOfMostRecentlySeenMessage между перезагрузками страницы. Вы можете сделать это в файле cookie, в локальном хранилище вашего браузера или даже в пользовательской части вашей базы данных:

 var userRef = firebase.database().ref("users").child(user.uid);
userRef.child("timestampOfMostRecentlySeenMessage").set(timestampOfMostRecentlySeenMessage);
  

Комментарии:

1. дело в том, что я хочу нажимать toast каждый раз, когда происходит изменение в firebase, поэтому мне также нужно будет обновить timestampOfMostRecentlySeenMessage. моя единственная проблема в том, что при первой загрузке страницы я не хочу читать сообщение.

Ответ №2:

я только что добавил флаг, который объявляется после первого запуска поиска.

 ref.orderByChild("notify").equalTo(1).limitToLast(1).on("child_added", function(snapshot) {
    var changedPost = snapshot.val();
    var mykey = snapshot.key;
    if(changedPost.notify == 1 amp;amp; $scope.flag== 1 ){
      var message = "New action "
      console.log(serviceArray[mykey].notify);//undefined
      $scope.showActionToast(message);
    } 
   $scope.flag= 1; 

});