使用查询读取最后一个值并将其更改为 firebase angularjs 1
using query to read the last value and change it 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 中插入一个新操作。它显示吐司。
我的问题是我不希望每次重新加载页面时都显示它。
所以我考虑添加一个简单的标志,如果它在 toast 中显示,它会将通知更改为 0。
我的问题是我有 returns 一个 firebaseArray
名为 serviceArray 的服务。当我尝试访问该行以更改它显示未定义的值时。如何更改同一函数中的值?
您最好只跟踪您向用户显示的最后一条消息的时间戳。有了它,您可以查询在该时间戳之后添加的消息:
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);
我刚刚在 运行 第一次搜索之后添加了一个声明的标志。
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;
});
我有这个数据库
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 中插入一个新操作。它显示吐司。
我的问题是我不希望每次重新加载页面时都显示它。
所以我考虑添加一个简单的标志,如果它在 toast 中显示,它会将通知更改为 0。
我的问题是我有 returns 一个 firebaseArray
名为 serviceArray 的服务。当我尝试访问该行以更改它显示未定义的值时。如何更改同一函数中的值?
您最好只跟踪您向用户显示的最后一条消息的时间戳。有了它,您可以查询在该时间戳之后添加的消息:
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);
我刚刚在 运行 第一次搜索之后添加了一个声明的标志。
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;
});