在工厂中以角度异步调用存储数据

时间:2015-03-18 14:05:46

标签: angularjs http variables save factory

我有以下问题。我从API获取数据并将其显示给用户。这是一个包含图像的列表,您可以滚动浏览。当用户点击图像时,他将获得有关其他网站上图像的更多信息。

我想将从服务器获得的数据存储在工厂内的局部变量中。但不知何故,数据没有得到妥善保存,这让我疯狂。

.factory('PostService', function($q, $http, domain){
var posts = [];

return {
    getInit: function(){
        var self = this;
        //get fresh elements
        console.log("get fresh elements");
        var req = {
            method: 'POST',
            url: domain+'/api/v1/statuses'
        }
        return $http(req).then(function(success){
            self.storeLocal(success.data.data); //store data in factory
            return success.data.data; //return data to controller
        }, function(error){
            console.log(error);
        });
    },

在通话结束后,我有第二个功能应该访问帖子并从服务器获取更多元素。

getAfter: function(){
        var self = this;
        console.log("get more elements");
        var req = {
            method: 'POST',
            url: domain+'/api/v1/statuses',
        data: {
            'last_status': posts[posts.length - 1].id
        }
        }
        return $http(req).then(function(success){
            if(success.data.data.length > 0){
                self.storeLocal(success.data.data);
                return success.data.data;
            } else {
                return false;
            }
        }, function(error){
            console.log(error);
        });
    }

    storeLocal: function(posts){
        posts = posts.concat(posts);
    },

但它告诉我帖子未定义。那问题是什么?

1 个答案:

答案 0 :(得分:0)

所以我可以解决这个问题,只需用posts = posts.concat(success.data.data)替换storeLocal函数就行了。

但是,有没有办法,使用我刚才提出的结构?我希望这可以工作,因为稍后我可以切换存储的工作方式。