【问题标题】:AngularJS - Append to a model with a $resourceAngularJS - 使用 $resource 附加到模型
【发布时间】:2012-11-08 16:40:19
【问题描述】:

我有这项服务:

factory('Post', function($resource) {
    return $resource('/api/post.json', {},
        {
            query: {method:'GET', isArray: false}
        }
    );
})

我有这个控制器:

function PostsCtrl($scope, Post) {
    // init
    $scope.page = 0;
    $scope.page_has_next = true;

    $scope.loadMore = function() {
        if($scope.page_has_next) {
            $scope.posts = Post.query({page: ++$scope.page},
                function(data) {
                    $scope.page_has_next = data.has_next;
                }
            );
        }
    }

    $scope.loadMore();
}

这很好用,每次执行loadMore() 时,模型都会使用下一页更新,直到没有更多页面为止。但是,我想将新的帖子集附加到当前模型而不是替换它,我该怎么做?

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    假设帖子是一个数组:

    $scope.posts = $scope.posts.concat(Post.query({page: ++$scope.page})
    

    这只有在新帖子与旧帖子没有重复时才有效。如果有重复,则必须遍历数组并仅推送新帖子。

    【讨论】:

    • 它实际上是这样工作的,我只需要将 $scope.posts = [] 初始化为一个数组,这样第一个 concat 就有效。谢谢。
    • 嗯,我真的很惊讶它可以工作,因为 $resource 是异步的(即使它假装是同步的:stackoverflow.com/q/11966252/1418796)。使用数组联系人的方法是一种很好的方法,但需要在查询的回调 (!) 中完成。
    • @pkozlowski.opensource 这正是我在查询回调中调用concat 的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 2017-03-31
    • 2017-01-21
    相关资源
    最近更新 更多