arrays - 移动 Firebase 数组中的项目

标签 arrays angularjs firebase synchronization angularfire

我一直在使用 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)">&DownArrow;</button>
        <button type="button" class="close space" ng-click="moveUp(post)">&UpArrow;</button>
        <button type="button" class="close space" ng-click="remove($index)">&times;</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/

相关文章:

java - Android - FirebaseListAdapter 以相反的顺序?

c# - 获取以偏移量开头的数组

php - 如何从 MySQL 获取并组合数据,然后插入到 PHP 数组中

PHP:如何使用数组索引访问数组元素值

javascript - 使用 javascript 显示/显示文件内容

android - 使用 AND 的 Firestore 查询链接

c - 指向数组的指针

javascript - AngularJS $resource 参数没有替换为其真实值?

javascript - 动画结束后如何删除类(class)?

java - 如何在 Firestore 查询的组合任务中获取最后一个可见的 DocumentSnapshot?