首页 > 解决方案 > 如何在angularjs中将http数据从服务传递到控制器

问题描述

var locationListCtrl=function($scope, loc8rData){
 $scope.message = "Searching for nearby places";
   loc8rData
      .success(function(data){$scope.message = data.length > 0 ? "" : "No locations Found";
        $scope.data = { locations: data };
     })
      .error(function(e){
        $scope.message = "Sorry, Something has gone wrong";
        console.log(e);
     });
};

var loc8rData = function ($http){
  

     return $http.get('/api/locations?lng=33.7741195&lat=-13.9626121&maxDistance=20');
};

标签: angularjsasynchronousresponse

解决方案


几点:

  • 考虑到,当您收到一个响应时,$http它是常见响应(带有状态、标题等)。因此,如果您想访问您的数据,您必须执行以下操作:response.data

  • 通常,当您拥有一项服务时,您会定义多个端点。因此,您可以返回具有多个请求的对象。

检查这个小样本是否有效:https ://plnkr.co/edit/FNxEeVZti6D1wmLe

.service('PokeApi', function($http) {
  return ({
    getPokemon: function (name) {
        return $http({
          method: 'GET',
          url: 'https://pokeapi.co/api/v2/pokemon/' + name,
          headers: { 'Content-Type': 'application/json' }
        });      
    }
  })
})

控制器很简单:

.controller('MainCtrl', function($scope, PokeApi) {
  $scope.name = 'Plunker';
  PokeApi.getPokemon('pikachu').then(function (response) {
    $scope.pokemon =  response.data;
  });
});

推荐阅读