AngularFire 扩展服务问题
AngularFire extending the service issue
我一直在查看同步数组的文档https://www.firebase.com/docs/web/libraries/angular/api.html#angularfire-extending-the-services and https://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;
}
发布 the issue at firebase/angularfire github 后,我收到了解决我问题的答案。当 $$added
被提供的代码覆盖时,$firebaseArray
也丢失了其内部记录 $id
。
添加这行代码:course.$id = course_key;
在返回课程之前,让 AngularFire 识别记录何时从服务器中删除。
我一直在查看同步数组的文档https://www.firebase.com/docs/web/libraries/angular/api.html#angularfire-extending-the-services and https://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;
}
发布 the issue at firebase/angularfire github 后,我收到了解决我问题的答案。当 $$added
被提供的代码覆盖时,$firebaseArray
也丢失了其内部记录 $id
。
添加这行代码:course.$id = course_key;
在返回课程之前,让 AngularFire 识别记录何时从服务器中删除。