用户使用angularfire过滤数据

时间:2016-11-17 22:22:04

标签: angularjs firebase firebase-realtime-database fullcalendar angularfire

我使用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);
     });

问题的最佳解决方案是什么?

1 个答案:

答案 0 :(得分:0)

如果您要修改从Firebase加载/同步的数据,则应扩展$firebaseArray服务。通过$loaded()执行此操作是错误的,因为这只会触发初始数据。

有关示例,请参阅Extending $firebaseArray上的AngularFire文档和Kato对Joining data between paths based on id using AngularFire的回答。