我一直在努力解决以下问题:
我正在尝试使用我在 Angular 服务(工厂)中实现的 $remove AngularFire 方法从 Firebase 数组中删除“Post”项目。这篇文章是“事件”的子项,因此为了删除它,我必须向此服务传递一个参数,其中包含我要删除该文章的相关事件。
这是我的控制器:
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”使用相同的结构可以完美地工作。
My view:
<div class="col-xs-8 col-xs-offset-2 well">
<form ng-submit="addPost()" ng-show="signedIn()">
<input type="text" ng-model="post.message" />
<button type="submit" class="btn btn-primary btn-sm">Add Post</button>
</form>
<br>
<div class="post row" ng-repeat="post in posts">
<div>
<div class="info">
{{ post.message }}
</div>
<div>
<span>submitted by {{ post.creator }}</span>
<a href="" ng-click="deletePost(post)" ng-show="user.uid === post.creatorUID">delete</a>
</div>
<br>
</div>
</div>
</div>
附注我不太确定我的“服务”是否以最好的方式实现。我找不到另一个解决方案来进行多个 Firebase 调用
var posts = $firebase(ref.child('events').child(eventId).child('posts')).$asArray();
在我的 EventService 的 Post 部分中,因为它依赖于每个 CRUD 操作中的 eventId。任何想法都会非常受欢迎:)