2016-11-26 2 views
2
app.service('cityService',['$http',function($http){ 
this.get = function(){ 
     $http({ 
      method : 'get', 
      url : API_SERVER+'city/' 
     }).success(function(response){ 
      console.log(response); 
      return response; 
     }).error(function(response){ 
      console.log(response); 
     }); 
    }; 
} 

Я пытаюсь использовать службу для извлечения данных с сервера, но проблема заключается в том, что я использую службу для хранения данных в переменной области. я получаю undefined. Я получаю данные, так как данные отображаются в консоли + служба работает тоже, когда я добавляю контроллер, но данные не сохраняются в любой переменной. Я использовал $timeout, чтобы отложить проверку переменной, но все равно не повезло. Я также использовал .then() но показать undefined для службы, когда я добавить с обслуживанием ...Работа с службами для обработки данных угловая

app.controller('Controller',['cityService',function(cityService){ 
$scope.temp = {}; 
$scope.temp = cityService.get(); 
}]); 

Во всяком случае, чтобы передать данные от службы к контроллеру? Примечание: также попытался сохранить данные в переменной службы и вернуть службу переменной

this.var = '' 
this.get = function(){ 
    $http({ 
     method : 'get', 
     url : API_SERVER+'city/' 
    }).success(function(response){ 
     this.var = response 
     console.log(this.var); 
     return this.var; 
    }).error(function(response){ 
     console.log(response); 
    }); 
}; 

данные хранить в переменной, но в конце концов, не переходя к контроллеру. любое руководство?

ответ

0

this.get метод вашей службы должен вернуть promise объект из, так что абонент может позвонить .then методу получить response или в цепочку обещания.

Сервис

app.service('cityService', ['$http', function($http) { 
    this.get = function() { 
     return $http.get(API_SERVER + 'city/'); 
     //below would work but use upper one smaller version 
     //return $http({ 
     // method : 'get', 
     // url : API_SERVER+'city/' 
     //}); 
    }; 
}]); 

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

Кроме того, вы пропустили добавить $scope зависимости внутри вашего массива DI.

app.controller('Controller', ['cityService', '$scope', 
    function(cityService, $scope) { 
    $scope.temp = {}; 
    cityService.get().then(function(response) { 
     console.log(response) 
     $scope.temp = response.data; 
    }); 
    } 
]); 

Demo Here

+0

$ HTTP вернуть обещание по умолчанию ... проверить angularjs документы ... пытался, но я получаю ошибку ..... тогда() не может быть установлен в не определено. Можно ли показать jsfiddle с рабочим кодом? coz mine is not working –

+0

@ScienCeSubject проверить обновленный ответ & plunkr :) –

+0

это вроде помогло ... изменило мою логику, чтобы добиться того, что я хотел ... но все равно thnx за то, что помог мне –

Смежные вопросы