我使用angular-ui-fullcalendar来显示和编辑事件。用户登录后可以登录并拥有唯一的uid
。我想用它来区分当前用户发生的事件与其他事件。我想将当前用户事件另外backgroundColor
。
这样做的最佳方式是什么?
我尝试了几件事。我的数据如下:
```
database
bookings
-KWnAYjnYEAeErpvGg0-
end: "2016-11-16T12:00:00"
start: "2016-11-16T10:00:00"
stick: true
title: "Brugernavn Her"
uid: "1f17fc37-2a28-4c24-8526-3882f59849e9"
```
我尝试使用当前用户uid过滤所有数据
var ref = firebase.database().ref().child("bookings");
var query = ref.orderByChild("uid").equalTo(currentAuth.uid);
var bookings = $firebaseArray(query);
$scope.eventSources = [bookings];
这不会返回任何内容。如果我省略第2行中的过滤器,它将按预期返回所有预订。但即使过滤器工作也无法解决我的问题,因为我想要获取当前用户事件和所有其他事件。 Firebase没有"不等于"过滤选项......
我尝试遍历每条记录并比较uid并设置backgroundColor
如果符合条件:
var ref = firebase.database().ref().child("bookings");
var bookings = $firebaseArray(ref);
bookings.$ref().on("value", function(snapshot) {
var list = snapshot.val();
for (var obj in list) {
if ( !list.hasOwnProperty(obj) ) continue;
var b = list[obj];
if (b.uid === currentAuth.uid) {
b.className = "myBooking";
b.backgroundColor = "red";
}
}
});
$scope.eventSources = [bookings];
但这会导致异步问题,因此预订'分配给$ scope.eventSources的数组未被修改。我试图在异步代码块中移动$ scope.eventSources = [bookings],但FullCalendar显然无法处理它并且什么都不呈现。
我也试过这个,但也没有运气:
bookings.$loaded()
.then(function(data) {
$scope.eventSources = [data];
})
.catch(function(error) {
console.log("Error:", error);
});
问题的最佳解决方案是什么?
答案 0 :(得分:0)
如果您要修改从Firebase加载/同步的数据,则应扩展$firebaseArray
服务。通过$loaded()
执行此操作是错误的,因为这只会触发初始数据。
有关示例,请参阅Extending $firebaseArray
上的AngularFire文档和Kato对Joining data between paths based on id using AngularFire的回答。