2014-12-09 5 views
1

Я создаю службу для возвращения координат местоположения. Но мне нужно каким-то образом вернуть значение.ТипError: Не удается прочитать свойство «success» undefined

angular.module('google.maps', []) 
.factory('geocode', ['$http', 'GOOGLE_MAPS_CREDENTIALS', function ($http,GOOGLE_MAPS_CREDENTIALS) { 
    return { 
     getCoords: function(addr1, zip) { 
      $http.get('https://maps.googleapis.com/maps/api/geocode/json?address=' 
       +encodeURIComponent(addr1+','+zip)+'&sensor=false' 
       +'&key='+GOOGLE_MAPS_CREDENTIALS.API_KEY); 
     } 
    } 
}]) 
.value('GOOGLE_MAPS_CREDENTIALS', { API_KEY: '_____________' }); 

После этого у меня есть контроллер вызова этой функции, как, например:

.controller('AddrNewCtrl', ['$scope','$state','$stateParams','geocode','$rootScope','Address', 
    function($scope, $state, $stateParams, geocode, $rootScope, Address) { 
    $scope.address = { 
     userId: {"__type":"Pointer","className":"_User","objectId":$rootScope.user.id} 
    }; 
    $scope.create = function() { 
     geocode.getCoords($scope.address.address1, $scope.address.zipCode) 
     .success(function(data) { // <-- this is where the console error is. 
      var lat = data.results[0].geometry.location.lat; 
      var lng = data.results[0].geometry.location.lng; 
      $scope.address.location = new Parse.GeoPoint({latitude:lat,longitude:lng}); 
     }); 
     Address.create($scope.address) 
     .success(function(data) { $state.go('tabs.address-list'); }); 
    }; 
}]) 

Проблема заключается в том, что, когда я называю успехом, я получаю TypeError:

TypeError: Cannot read property 'success' of undefined 

Там есть небольшая разница между тем, как я реализую эту услугу по сравнению с любой другой услугой, и когда я получаю все значения, ожидаемые при вызове функции . функция в контроллере.

Я ищу одного из двух ответов:

  1. Почему success обратного вызова, возвращающего ошибку?
  2. Как я могу просто вернуть объект «Координаты» при вызове службы geocode?
+2

Это не «успех» обратный вызов сам по себе, что это предмет ошибок. Ошибка означает, что вызов 'getCoords()' ничего не возвращает. – Pointy

+1

вы не возвращаете обещание на getCoords, вы должны иметь 'return $ http.get' –

+0

Вау, спасибо. Это разрешило @Pointy, не стесняйтесь вставить это в ответ, и я дам вам кредит на это. –

ответ

4

Вы должны

getCoords: function(addr1, zip) { 
     return $http.get('https://maps.googleapis.com/maps/api/geocode/json?address=' 
      +encodeURIComponent(addr1+','+zip)+'&sensor=false' 
      +'&key='+GOOGLE_MAPS_CREDENTIALS.API_KEY); 
    } 
Смежные вопросы