【问题标题】:AngularFire extending the service issueAngularFire 扩展服务问题
【发布时间】:2015-07-15 23:39:20
【问题描述】:

我一直在查看同步数组 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 版

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

.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")); 
)

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

另外,如果我删除$$removed函数,删除记录时扩展服务仍然不会同步。

如果我修改我的代码以使用 $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;
}
  

【问题讨论】:

  • 在 firebase/angularfire github 上发布该问题后,我收到了 answer 解决了我的问题。当 $$added 被提供的代码覆盖时,$firebaseArray 也失去了其内部方法 $id。通过添加这行代码:course.$id = course_key; 在返回课程之前,angularfire 可以识别记录何时从服务器中删除。
  • 很高兴听到安德斯。您可以发布相同的答案,以便清楚地回答这个问题吗?

标签: firebase angularfire


【解决方案1】:

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

在返回课程之前添加这行代码:course.$id = course_key;,让 AngularFire 识别记录何时从服务器中删除。

【讨论】:

    猜你喜欢
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多