我一直在使用 firebase API,但遇到了一些困难。
问题是我正在尝试在数组中上下移动项目,但似乎无法弄清楚如何在 Firebase API 中执行此操作。
这是我的 Controller
angular.module('aceTrainingApp')
.controller('AdminController',['$scope','FirebaseService', function ($scope, FirebaseService) {
$scope.posts = FirebaseService.getPosts();
$scope.localPosts = $scope.posts; //is this Right??
$scope.newPost = {name: '', body: ''};
$scope.remove = function (id) {
FirebaseService.removePost(id);
};
$scope.updatePost = function (id) {
FirebaseService.updatePost(id);
$scope.newPost = {name: '', body: ''};
};
$scope.addPost = function() {
FirebaseService.addPost(angular.copy($scope.newPost));
};
//only trying to get moveDown working first
// $scope.moveUp = function(post) {
// var crntPos = $scope.posts.indexOf(post);
// if (crntPos > 0) {
// $scope.posts.splice(crntPos, 1);
// $scope.posts.splice(crntPos - 1, 0, post);
// }
// };
$scope.moveDown = function(post) {
var crntPos = $scope.localPosts.indexOf(post);
if (crntPos < $scope.localPosts.length) {
$scope.localPosts.splice(crntPos, 1);
$scope.localPosts.splice(crntPos + 1, 0, post);
FirebaseService.updateAllPosts($scope.localPosts);
}
};
}]);
这是服务
angular.module('aceTrainingApp').factory('FirebaseService', [ '$firebase', function($firebase){
var ref = new Firebase('https://acetrainingsolutions.firebaseio.com/');
var posts = $firebase(ref).$asArray();
var getPosts = function(){
return posts;
};
var removePost = function(id){
posts.$remove(id);
};
var updatePost = function(post){
posts.$save(post);
};
var addPost = function(index){
posts.$add(index);
};
return {
getPosts: getPosts,
removePost: removePost,
updatePost: updatePost,
addPost: addPost
};
}]);
HTML
<li ng-repeat="post in localPosts track by $index">
<input type="text" ng-model="post.name" ng-blur="updatePost($index)">
<input type="text" ng-model="post.body" ng-blur="updatePost($index)">
<button type="button" class="close space" ng-click="moveDown(post)">↓</button>
<button type="button" class="close space" ng-click="moveUp(post)">↑</button>
<button type="button" class="close space" ng-click="remove($index)">×</button>
</li>
问题是 splice 方法仅适用于 Firebase 文档中提到的 View 。有人可以帮我修复 moveUp 和 moveDown 函数吗?
干杯
最佳答案
事实证明,因为我的数组包含键包含“$”的对象,所以更新方法不起作用。更新方法也不正确。
Firebase服务
var updatePost = function(id){
posts.$save(id);
};
var updateAllPosts = function(posts){
ref.set(posts);
};
管理 Controller
$scope.moveDown = function(post) {
var localPosts = [];
var crntPos = $scope.posts.indexOf(post);
if (crntPos < $scope.posts.length) {
$scope.posts.splice(crntPos, 1);
$scope.posts.splice(crntPos + 1, 0, post);
for(var i = 0; i < $scope.posts.length; i++){
var obj = {
name: $scope.posts[i].name,
body: $scope.posts[i].body
};
localPosts.push(obj);
}
FirebaseService.updateAllPosts(localPosts);
}
};
关于arrays - 移动 Firebase 数组中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26315043/