2016-10-01 6 views
0

У меня есть эта база данныхс помощью запроса, чтобы прочитать последнее значение и изменить его firebase angularjs 1

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. Он показывает тост.

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

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

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

ответ

2

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

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 между перезагрузками страниц. Вы можете сделать это в куки, в локальном хранилище вашего браузера или даже конкретного пользователя части вашей базы данных:

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

дело в том, что я хочу, чтобы подтолкнуть тост каждый раз, когда Theres изменение в firebase, так что мне нужно будет обновить timestampOfMostRecentlySeenMessage тоже. моя единственная проблема в том, что в первый раз, когда я загружаю страницу, я не хочу читать сообщение. – 2one2

+0

Никогда не было решения, было легче, чем я. – 2one2

+0

, но ваш ответ поможет мне решить эту проблему. – 2one2

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 && $scope.flag== 1){ 
     var message = "New action " 
     console.log(serviceArray[mykey].notify);//undefined 
     $scope.showActionToast(message); 
    } 
    $scope.flag= 1; 

});