Javascript 从返回的MongoDB对象更新Angular.js$scoped

Javascript 从返回的MongoDB对象更新Angular.js$scoped,javascript,angularjs,node.js,mongodb,mongoose,Javascript,Angularjs,Node.js,Mongodb,Mongoose,我目前正在平均堆栈中构建CRUD应用程序。但我遇到了一个我似乎无法解决的潜在问题 一个简单的概述是,我有许多博客文章,希望通过基本分页在ng click事件上加载更多文章(基于_id)。我可以获取数据,但我在用新获取的对象更新$scope时遇到问题 加载更多帖子HTML: <div ng-click="loadMoreBlogPosts(post._id)" ng-show="$last">Load more</div> 角度模型: return {

我目前正在平均堆栈中构建CRUD应用程序。但我遇到了一个我似乎无法解决的潜在问题

一个简单的概述是,我有许多博客文章,希望通过基本分页在ng click事件上加载更多文章(基于_id)。我可以获取数据,但我在用新获取的对象更新$scope时遇到问题

加载更多帖子HTML:

<div ng-click="loadMoreBlogPosts(post._id)" ng-show="$last">Load more</div>
角度模型:

return {

        Posts: $resource('/api/blog', {}, { 

            query: { method: 'GET', isArray: true },
            add: { method:'POST', isArray:false },

        }),

        MorePosts : $resource('/api/moreposts/:id', {}, { 

            query: { method: 'GET', isArray: true, params:{ id:'@id' } }

        }),

        Post: $resource('/api/blog/post/:id', {}, { 

            query: { method: 'GET', isArray: true, params:{ id:'@id' } },
            add: { method:'POST', isArray:false },
            update: { method:'PUT', isArray:false, params:{ id:'@id' } },
            delete: { method:'DELETE', params:{ id:'@id' } }

        }),
} 
Mongoose/MongoDB/节点控制器:

// All Blog Posts (This works fine)
$scope.allPosts = function() {
    $scope.posts = Blog.Posts.query();
}

// Load More Blog Posts 
$scope.loadMorePosts = function(id) {
    /* Current Issue */
    Blog.MorePosts.query({id:id}, function(data) { 
       $scope.posts.push(data) /* This doesn't work */
    })
}
exports.posts = function(req, res, next) {

    // Blog Posts
    Blog.find()
        .sort('-created')
        .limit(3)
        .find(function (err, posts) {
        // Check
        if(err) {
            // Error
            return next(err)
        } else {
            // Success
            res.json(posts) 
        }
    })

};


exports.moreposts = function(req, res, next) {

    //console.log(req.params.id);
    // Blog Posts
    Blog.find({"_id": { "$lt": req.params.id }})
        .sort('-created')
        .limit(2)
        .find(function (err, posts) {
        // Check
        if(err) {
            // Error
            return next(err)
        } else {

            // Success
            res.json(posts) 
            console.log(posts);/* Showing in Terminal */

        }
    })

};
这让我困惑了几个小时。我肯定我一定忽略了一些相当简单的事情,或者事实上我的逻辑是完全错误的(我希望是前者),任何帮助或指导都将不胜感激

另一方面,如果loadMoreBlogPosts函数被激发,则会出现以下情况:

$scope.posts = Blog.MorePosts.query({id:id})
$scope.posts.push(data);
上面将显示更改$scope.posts以显示从节点/mongo控制器返回的对象。这表明逻辑是正确的,我只需要找到一种方法将数据附加到$scope.posts,而不是替换它。

以下内容:

$scope.posts = Blog.MorePosts.query({id:id})
$scope.posts.push(data);
将新数组添加到现有数组的末尾,使其成为嵌套数组

您需要的是将旧阵列与新阵列合并,而不替换旧阵列

以下方面应起作用:

Blog.MorePosts.query({id:id}, function(data) { 
  $scope.posts.push.apply($scope.posts, data);
});
如果您使用的是
跟踪方式
,例如:

<div ng-repeat="post in posts track by post.id">

你我的朋友刚刚把我揍了一顿,我正要测试这个(他们都这么说;))我正在考虑采用push.apply或可能的.concat。后者不起作用,但这确实起了作用。干杯,伙计。不客气:)你回答的时候,我刚刚编辑了我的答案<只要使用它返回的新数组,code>concat就可以工作。如果您没有使用
track by
,但是
concat
选项将使
ng repeat
重新提交整个集合。@HireLee除了接受问题的答案外,您还可以使用投票系统,这样答案就不会保持零分接受答案:)如果一个答案帮助你解决了问题,你接受它,你也应该考虑投票。2) 如果其他答案也有帮助,您也可以投票支持。