作者:手机用户2502870367 | 来源:互联网 | 2023-05-21 10:43
我一直在努力解决以下问题:
我正在尝试使用$ remove AngularFire方法从Firebase数组中删除"发布"项目,该方法已在Angular Service(Factory)中实现.这个帖子是'事件'的孩子,所以为了删除它,我必须将此服务传递给我想要删除帖子的相关事件的参数.
这是我的控制器:
app.controller('EventSignupController', function ($scope, $routeParams, EventService, AuthService) {
// Load the selected event with firebase through the eventservice
$scope.selectedEvent = EventService.events.get($routeParams.eventId);
// get user settings
$scope.user = AuthService.user;
$scope.signedIn = AuthService.signedIn;
// Message functionality
$scope.posts = EventService.posts.all($scope.selectedEvent.$id);
$scope.post = {
message: ''
};
$scope.addPost = function (){
$scope.post.creator = $scope.user.profile.username;
$scope.post.creatorUID = $scope.user.uid;
EventService.posts.createPost($scope.selectedEvent.$id, $scope.post);
};
$scope.deletePost = function(post){
EventService.posts.deletePost($scope.selectedEvent.$id, post);
// workaround for eventService bug:
// $scope.posts.$remove(post);
};
});
这是我的服务(工厂):
app.factory('EventService', function ($firebase, FIREBASE_URL) {
var ref = new Firebase(FIREBASE_URL);
var events = $firebase(ref.child('events')).$asArray();
var EventService = {
events: {
all: events,
create: function (event) {
return events.$add(event);
},
get: function (eventId) {
return $firebase(ref.child('events').child(eventId)).$asObject();
},
delete: function (event) {
return events.$remove(event);
}
},
posts: {
all: function(eventId){
var posts = $firebase(ref.child('events').child(eventId).child('posts')).$asArray();
return posts;
},
createPost: function (eventId, post) {
// this does work
var posts = $firebase(ref.child('events').child(eventId).child('posts')).$asArray();
return posts.$add(post);
},
deletePost: function (eventId, post) {
// this does not work
var posts = $firebase(ref.child('events').child(eventId).child('posts')).$asArray();
return posts.$remove(post);
}
}
};
return EventService;
});
当我尝试删除链接标记时,只是冻结并且控制台中不会显示错误日志记录.如果我直接在我的控制器中调用我的$ scope.posts上的$ remove,它会神奇地工作..此外,我的帖子不会从我的Firebase数据库中删除.
另一个奇怪的事情是'CreatePost'使用相同的结构完美地工作.
我的看法:
Ps我不太确定我的'服务'是以最好的方式实现的......我找不到另一个做多个firebase调用的解决方案
var posts = $firebase(ref.child('events').child(eventId).child('posts')).$asArray();
在我的EventService的Post部分中,因为它依赖于每个CRUD操作中的eventId.任何想法都会非常欢迎:)
1> 小智..:
对我来说最简单的方法就是使用它:
var ref= new Firebase('https://Yourapp.firebaseio.com/YourObjectName');
ref.child(postId).remove(function(error){
if (error) {
console.log("Error:", error);
} else {
console.log("Removed successfully!");
}
});