2016-02-08 13 views
0

如何使用$http.jsonp返回APIData.map而不是默認成功APIdata

LangDataService構造:

languages.LangDataService = function($http, $q) { 
    this.langDefer = $q.defer(); 
    this.isDataReady = this.langDefer.promise; 
}; 


languages.LangDataService.prototype.getApi = function() { 
    return this.isDataReady = this.http_.jsonp(URL, { 
     params: {} 
     }) 
     .success(function(APIData) { 
     return APIData.map(function(item){ 
       return item + 1; //just an example. 
     }); 
     }); 
}; 

一個CTRL使用LandDataService

languages.LanguageCtrl = function(langDataService) { 
    languages.langDataService.isDataReady.then(function(data){ 
     console.log('whooo im a transformed dataset', data); 
    }); 
} 

回答

1

使用then而不是successgetApi功能。

+0

由於某些原因,當你把一個'然後'它將數據包裝在一個'data'鍵中......並且我拒絕讀取錯誤並認爲它是角度不工作的。謝謝。 –

1

嘗試使用以下版本的: https://jsfiddle.net/L2ndft4w/

// define the module for our AngularJS application 
var app = angular.module('App', []); 

app.factory('LangDataService', function($q,$http) { 

    return { 
    getApi: function() { 
     var defer= $q.defer(); 
     $http({ 
      url: 'https://mysafeinfo.com/api/data?list=zodiac&format=json&alias=nm=name', 
      dataType: 'json', 
      method: 'GET', 
      data: '', 
      headers: { 
       "Content-Type": "application/json" 
      } 
     }). 
     success(function (data) { 

      defer.resolve(data.map(function(item){ 
      return item.name; 
      })); 
     })  
     return defer.promise; 
    } 
    }; 
}); 

// invoke controller and retrieve data from $http service 
app.controller('DataController', function ($scope, LangDataService) { 
    LangDataService.getApi().then(function(data){ 
    $scope.data = JSON.stringify(data, null, 2); 
    }); 
}); 

返回:

[ 
    "Aquarius", 
    "Aries", 
    "Cancer", 
    "Capricorn", 
    "Gemini", 
    "Leo", 
    "Libra", 
    "Ophiuchus", 
    "Pisces", 
    "Sagittarius", 
    "Scorpio", 
    "Taurus", 
    "Virgo" 
] 

雖然,因爲$ HTTP已經是一個承諾,有可能是一個更短的方式做到這一點? ($q.when?)