【问题标题】:angularjs api , return objectangularjs api,返回对象
【发布时间】:2015-10-12 19:30:07
【问题描述】:

我使用 Riot 游戏 API,创建一个工厂并在我需要的地方使用获取和排序数据

        angular.module('starter.services', [])

    .factory('API',function($http){
    var data={};
    var token = "****";
    return{
        Getalldata : function(name){


            $http.get("https://eune.api.pvp.net/api/lol/eune/v1.4/summoner/by-name/" + name, {
          params: {
            api_key: token
          }
        })
        .success(function(response, error) {

          var dbc = [];
          //console.log(response);
          res = response[name];
          //console.log(res);
          id = res.id;


          //$scope.img = "http://sk2.op.gg/images/profile_icons/profileIcon"+res.profileIconId+".jpg";
          $http.get("https://eune.api.pvp.net/api/lol/eune/v1.3/stats/by-summoner/" + res.id + "/summary", {
              params: {
                season: "SEASON2015",
                api_key: token
              }
            })
            .success(function(response, error) {
              //$scope.stat=response.playerStatSummaries
              response.playerStatSummaries.forEach(function(entry) {
                  //console.log(entry);
                  if(entry.playerStatSummaryType=="Unranked"){

                    data.norank5x5=entry;
                  }
                  if(entry.playerStatSummaryType=="CAP5x5"){
                    data.team5x5=entry;
                  }
                  if(entry.playerStatSummaryType=="Unranked3x3"){
                    data.unrank3x3=entry;
                  }
                  if(entry.playerStatSummaryType=="RankedTeam3x3"){
                    data.rank3x3=entry;
                  }
                  if(entry.playerStatSummaryType=="RankedTeam5x5"){
                    data.rank5x5=entry;
                  }

                  //console.log(data.team5x5);

              });
              //console.log(data);
            //return data;

          });

        });

        return date;
        }
        /*getRankData : function(name,sezin){

            mydata = "kola";
            return mydata;

        }*/
    };
});

并使用这个工厂,但是在 Click 的控制器中我使用我的工厂我得到“未定义”,我怎样才能得到我的对象? 控制器代码:

.controller('MainCtrl', function($scope,$rootScope,$ionicLoading,API) {

  $scope.showmenu = function(){
        console.log(API.Getalldata("fenix"));
    }

});

【问题讨论】:

  • 您能提供您遇到的任何错误吗?如果您在“fenix”中硬编码,您的 API 调用是否有效?
  • 是的,我没有错误,如果我在控制器中执行工厂代码一切正常。
  • 见下面的答案。您返回的是“日期”而不是“数据”,请单击检查,如果这最终成为您的问题。 :-)
  • 不不,我在编辑器stackoverflow中输入了这个错误,对不起
  • 向我们展示onClick ...您不会将其用于角度代码...在不同的上下文中运行

标签: javascript angularjs factory


【解决方案1】:

返回函数内部的$http。然后在$scope函数中,做:

API.Getalldata("something").then(function(response) { console.log(response) });

请注意,我自己没有尝试过,但它应该可以/可以帮助您使其正常工作。

顺便说一句:返回日期/数据是没有用的,因为 $http 是一个承诺,并且在应该返回值的时候变量不会被解析。

【讨论】:

  • 我尝试得到“TypeError: undefined is not a function”。如果做 API.Getalldata("fenix");获取空对象
  • 我能及时得到结果吗?
  • 他是对的。不,您无法“实时”获得结果。
  • 我需要用什么来准时到达?
  • 得到答案,我使用 var deferred = $q.defer();在我的工厂,然后 deferred.resolve({ data1:data });然后返回 deferred.promise;在控制器中获取我的 obj console.log(API.Getalldata("fenix"));
【解决方案2】:

我想我发现了你的问题。您返回的是“日期”而不是“数据”

angular.module('starter.services', [])

.factory('API',function($http){
var data={};
var token = "****";
return{
    Getalldata : function(name){

     [..edited..]

    });

    return date; // HERE, I THINK IS YOUR PROBLEM
    }
    /*getRankData : function(name,sezin){

        mydata = "kola";
        return mydata;

    }*/
};});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 2014-10-05
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多