【问题标题】:How to access objects returned by a service from within controllers如何从控制器中访问服务返回的对象
【发布时间】:2023-03-16 23:55:01
【问题描述】:

我有一个将对象数组返回给控制器的服务,即控制台 显示以下响应:

Array[0]
0
:
Object
first_name
:
"Emi"
id
:
"255860959988416847"
last_name
:
"Hauritz Seino"
url
:
"https://www.pinterest.com/amusemi/"
__proto__
:
Object
1
:
Object
first_name
:
"mohammed"
id
:
"474848491869398608"
last_name
:
"al-kahtani"
url
:
"https://www.pinterest.com/alkahtani0848/"
__proto__
:
Object
2
:
Object
first_name
:
"❤  T r e n d    2    W e a r  ❤  "
id
:
"418553496527224475"
last_name
:
""
url
:
"https://www.pinterest.com/trend2wear/"
__proto__
:
Object
length
:
3
__proto__
:
Array[0]

我需要帮助来了解数组中包含三个对象时如何显示“0”长度,以及如何从控制器中访问这些对象。

控制器代码:

$http.get('json/ConfigData.json').success(function(data) {
        $scope.ebayApiURL = data.ebay.BeautyebayPopularItems; 
        var parampins= 'PinsByBoard'; 
        var paramApiURL='PinsByBoardByTokenAPIURL'  
        arrpins=data.Pinterest[parampins];
        arrapiurl =data.Pinterest[paramApiURL];
        console.log(arrapiurl);
        console.log(arrpins);
        $scope.UrlArr=[];
        for(var i=0; i<data.Pinterest[parampins].length ;i++)
        {
            var PinFullUrl=arrapiurl + arrpins[i] + data.Pinterest.PiNJSONCALLBACKByToken;
            console.log(PinFullUrl);
            $scope.UrlArr[i]=PinFullUrl;

        }
            $scope.Creator=[];
            $scope.Creator=Comics.LoadDataFromPinteByToken($scope.UrlArr);
            console.log($scope.Creator);
      })

服务代码:

var deferred = $q.defer();
              var urlCalls = [];
              var mergedArray =[];
              var k=0;
              angular.forEach(UrLArray, function(url)
               {
                urlCalls.push($http.jsonp(url));
               });
                $q.all(urlCalls)
                  .then(function(results) {
                    deferred.resolve(
                    JSON.stringify(results.length))
                    console.log(results);
                    for(i=0;i<results.length;++i)
                        mergedArray[i]=results[i].data.data.creator;


             },
              function(errors) {
                deferred.reject(errors);
              },
              function(updates) {
                deferred.update(updates);
              }

              )
                  return mergedArray;

          }

【问题讨论】:

    标签: javascript angularjs arrays angularjs-scope angularjs-service


    【解决方案1】:

    你必须像这样在服务中返回承诺内的

    var deferred = $q.defer();
                  var urlCalls = [];
                  var mergedArray =[];
                  var k=0;
                  angular.forEach(UrLArray, function(url)
                   {
                    urlCalls.push($http.jsonp(url));
                   });
                    $q.all(urlCalls)
                      .then(function(results) {
                        deferred.resolve(
                        JSON.stringify(results.length))
                        console.log(results);
                        for(i=0;i<results.length;++i)
                            mergedArray[i]=results[i].data.data.creator;
    
                 })
                      return deferred.promise; // return the promise 
    
              }
    // and use then within controller 
    // like : service.getData().then(function(resolved_data){
    //console.log(resolved_data)
    //})
    

    【讨论】:

    • 返回承诺看起来像没有数据:承诺 $$state:对象状态:1 值:“3”proto:对象 proto,我需要 returen 合并数组,非常感谢 ahmed : Object
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2015-04-18
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多