【问题标题】:$http in a service returns value in $$state in Angularjs Services服务中的 $http 返回 Angularjs 服务中 $$state 中的值
【发布时间】:2015-10-29 05:41:36
【问题描述】:

我编写了一项服务来从服务器获取数据。服务器在本地运行以进行测试。我面临的问题是数据 如果 $http 写在服务中,则在 $$state 中返回。如果在控制器中写入相同的 $http,我会得到数据。

如果我输入 res.$$state.value.dat,$$state 不会返回任何数据

aggregate.service('someService',function ($http) 
{

        var yearlyAPI = "http://localhost:3000/api";
        var yearly =[];
        return {
        getYearlyAgg : function()
        {
            if(yearly.length!=0)
            {   
              log("Returning Stored Data For yearly Agg");
              return yearly;
            }
            else
            {

            var startDate =  "2015-08-01";
            var endDate =  "2015-08-04";

            var params = {};
            params.startDate = startDate;
            params.endDate = endDate;

            var yearData = $http.get(yearlyAPI,{
                params :params
            });

                yearly=yearData;
                log("Returning New Data For yearly Agg");
                log(yearData);
                return yearData;
            }   
        }
    };  /*Return Ends*/
});

【问题讨论】:

    标签: javascript json angularjs html xmlhttprequest


    【解决方案1】:

    更改您的代码并尝试以下操作:

    aggregate.service('someService',function ($http,$q) 
    {
    
            var yearlyAPI = "http://localhost:3000/api";
            var yearly =[];
            return {
            getYearlyAgg : function()
            {
                if(yearly.length!=0)
                {   
                  console.log("Returning Stored Data For yearly Agg");
                  return $q.when(yearly); //with this you will return a promise if yearly variable contain some object
                }
                else
                {
    
                var startDate =  "2015-08-01";
                var endDate =  "2015-08-04";
    
                var params = {};
                params.startDate = startDate;
                params.endDate = endDate;
    
                return $http.get(yearlyAPI,{
                    params :params
                }).then(function(result){
                   yearly.push(result.data); //here you will add your new value to yearly array
                   return result.data; //you are returning new data after you stored it in yearly variable
                 });
    
                }   
            }
        };  /*Return Ends*/
    });
    

    请与我们分享您的反馈。

    【讨论】:

    • 但如果我调用此服务,则会再次发出 http 请求。这就是为什么我每年都有 = [] 。这样如果再次调用服务,则返回已经存储在数组中的数据,而不是再次调用服务器。
    • someService.getYearlyAgg().then(function(){ });暂时完成工作。
    • someService.getYearlyAgg().then(function(){});是在控制器中调用此服务的正确方法。
    • 如果您对我的回答感到满意,请将其标记为正确答案。
    猜你喜欢
    • 2015-08-05
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    相关资源
    最近更新 更多