#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;
});