AngularFire扩展了服务问题

时间:2015-07-15 23:39:20

标签: firebase angularfire

我一直在查看同步阵列的文档https://www.firebase.com/docs/web/libraries/angular/api.html#angularfire-extending-the-serviceshttps://www.firebase.com/docs/web/libraries/angular/guide/extending-services.html#section-firebasearray

我正在使用Firebase版本2.2.7和AngularFire版本1.1.2

使用下面的代码,我无法识别$$删除的事件。

.factory("ExtendedCourseList", ["$firebaseArray",  function($firebaseArray) {
  // create a new service based on $firebaseArray
  var ExtendedCourseList= $firebaseArray.$extend({
    $$added: function(dataSnapshot, prevChild){
        var course = dataSnapshot.val();
        var course_key = dataSnapshot.key();
        console.log("new course");
        return course;
    },
    $$removed: function(snap){
        console.log("removed");
        return true;
    }
  });
  return function(listRef) {      
    return new ExtendedCourseList(listRef);
  } 
}]) 

.factory("CompanyRefObj", function(CompanyRef) {
  //CompanyRef is a constant containing the url string  
  var ref = new Firebase(CompanyRef);
  return ref;
})

.factory('CourseList', function (localstorage,$rootScope,ExtendedCourseList,CompanyRefObj) {
    var companyID = localstorage.get("company");   
    $rootScope.courseList = ExtendedCourseList(CompanyRefObj.child(companyID).child("courses")); 
)

如果我运行此代码,则只会触发$$添加的事件。为了模拟删除事件,我使用Firebase的Web界面显示数据,按下删除按钮并接受永久删除的数据。

此外,如果删除$$删除的功能,则删除记录时扩展服务仍将无法同步。

如果我修改我的代码以使用$ firebaseArray而不是扩展服务(如上所示),则将识别添加和删除事件。

 .factory('CourseList', function (localstorage,$rootScope,$firebaseArray,CompanyRefObj) {
    var companyID = localstorage.get("company");   
    $rootScope.courseList = $firebaseArray(CompanyRefObj.child(companyID).child("courses")); 
)

最后,是否有任何我错过的不良做法会导致某些扩展功能不起作用?

解决

$$added: function(dataSnapshot, prevChild){
    var course = dataSnapshot.val();
    var course_key = dataSnapshot.key();
    //Modified below
    course.$id = course_key;
    //End of modification
    console.log("new course");
    return course;
}

1 个答案:

答案 0 :(得分:2)

在发布the issue at firebase/angularfire github后,我收到了解决问题的答案。当$$added被提供的代码覆盖时,$firebaseArray也会丢失其内部记录$id

在返回课程之前添加以下代码行:course.$id = course_key;,使AngularFire能够识别从服务器删除记录的时间。