Stepan13
@Stepan13
JS everywhere...

Как сохранить результат (data) $http.get запроса для дальнейшего использования?

Добрый день!
Делаю запрос и пытаюсь как-то сохранить результат для того, чтобы в дальнейшем использовать ещё один раз эти данные, не делая повторного запроса. Как обычный объект от контроллера в сервис - не получается.
  • Вопрос задан
  • 1163 просмотра
Решения вопроса 1
njnesterov
@njnesterov
CEO EventSide LLC
Все зависит от конкретного случая. Если ты хочешь использовать те же данные в том же контроллере, то тебе не нужно выносить их в сервис. Но если они будут использоваться еще и в других, то нужно вынести.

Контроллер:
angular.module('myApp').controller('homePageCtrl', ['$scope', 'dataService', function($scope, dataService){
	$http.get('/data').success(function(data){
            $scope.dataForView = data;
            dataService.setData(data);
         });

         //можем и в данном контроллере использовать повторный раз данные
         $scope.dataForView = dataService.getData();
}]);


А можем и в другом контроллере использовать эти данные:
angular.module('myApp').controller('mainPageCtrl', ['$scope', 'dataService', function($scope, dataService){
         $scope.dataForMainView = dataService.getData();
}]);


И наш сервис:
angular.module('eventsideApp').factory('dataService', function(){
	var dataCtrl = {};
	
	return {
		setData: function (data) {
			dataCtrl = data;
			return dataCtrl;
		},
		getData: function () {
			return dataCtrl;
		}
	};
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
$http сервис возращает объект-Promise.
Для взаимодействия с ним используется Promises API:
$http.get('/somepath')
.then(function(data) {
    // обрабатываем полученный ответ от сервера
   // объект data можно присвоить чему угодно, тут отличий никаких нет
    console.log(data);
    },
function(error) {
    // сюда мы попадаем, если при обрабоке запроса произошла ошибка
    console.log(error);
});
Ответ написан
Комментировать
miraage
@miraage
Старый прогер
// somectrl.js
function SomeCtrl(SomeService) {
    var vm = this;

    SomeService.getData().then(function (data) {
        vm.data = data;
    });
}

// someservice.js
function SomeService($http) {
    this.getData = function () {
        // Если данные всегда одинаковые - можно написать вторым параметром {cache: true}
        return $http.get('/data').then(fetchResponse, fetchResponse);

        function fetchResponse(response) {
            return response.data;
        }
    };
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы