【问题标题】:storing data in factory on asynchronus call in angular以角度异步调用将数据存储在工厂中
【发布时间】:2015-03-18 14:05:45
【问题描述】:

我有以下问题。我从 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);
    },

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

【问题讨论】:

    标签: angularjs http variables save factory


    【解决方案1】:

    所以我可以解决这个问题,只需将 storeLocal 函数替换为 posts = posts.concat(success.data.data) 即可。

    但是没有办法使用我刚刚介绍的结构吗?我想让它工作,因为稍后我可以切换存储的工作方式。

    【讨论】:

      猜你喜欢
      • 2014-03-30
      • 2021-04-23
      • 2022-09-25
      • 2013-12-15
      • 2023-03-17
      • 2015-06-02
      • 1970-01-01
      • 2018-11-13
      • 2014-02-20
      相关资源
      最近更新 更多