0

Я использую ресурс Angular $ для создания api, и я хотел бы сохранить эти результаты в службе, а не в контроллере, потому что каждый раз, когда я вызываю контроллер, результаты снова вызываются , и, таким образом, любые изменения, которые были сделаны, удаляются.Сохранение результатов углового ресурса на заводе

Я попытался ответы, приведенные в несколько SO статей, включая:

AngularJS: Using Shared Service(with $resource) to share data between controllers, but how to define callback functions?

и

Angular Services/Factories with $resource

, но ни один из тех, кто работал, потому что мне нужны результаты, хранящиеся в службе, но доступный для контроллера.

Любая помощь была бы принята с благодарностью.

+0

Я думаю, что $ resource требует много работы разработчика для более эффективного использования. Что заставило меня переключиться на эту структуру: http://www.js-data.io/docs/home –

+0

Hey Louie, Я смотрел, что это выглядит действительно интересно, к сожалению, хотя я должен использовать угловые, потому что я строю приложение с Ionic. Однако, спасибо! – RandyMarsh

+0

Это не агностик, поэтому он работает с угловым! : D –

ответ

0

Поскольку услуги Angular's Services/Factories являются одиночными, если вы просто поместите значение обратного вызова в переменную сервисов, вы сможете получить его из любого места. Пример:

angular.module('foo',[]) 
    .service('FooService', ['$resource', function($resource){ 
     this.users = [] 
     $resource('/users') 
     .get(function(users) { 
      this.users = users 
      }) 

    this.getUsers = function(){ 
     return this.users 
    } 
    }) 
    .controller('FooController', ['$scope','FooService', function($scope, FooService){ 
    $scope.users = FooService.getUsers() 
    }) 

Приятно вспомнить, что $ ресурс зрелищно асинхронный запрос к серверной, так что было бы неплохо, чтобы гарантировать это данные, которые он собирается быть доступны, прежде чем пытаться получить его от службы.

+0

Hey Igor, Спасибо за ответ, но, к сожалению, он все еще не работает. Я все еще получаю пустой массив в контроллере. Теперь объект находится в сервисе, но всякий раз, когда я пытаюсь получить его в контроллере, это просто пустой массив. – RandyMarsh

+0

'this' в обратном вызове' .get' не относится к вашей службе, и даже если это так, ссылка на this.users перезаписывается новой ссылкой. Вот рабочий пример: http://plnkr.co/edit/daqkpr9P4c3KnwBVX30z?p=preview Он работает, но это плохой шаблон, потому что вы неявные данные совместного использования (пользователи) через ваше приложение. Ошибки будут происходить легко. –

0

Всегда используйте обещания!

angular.module('foo',[]) 
    .service('FooService', ['$resource', function($resource){ 
    this.getUsers = function() { 
     return $resource('/users', .get().$promise; 
    }; 
    }) 
    .controller('FooController', ['$scope','FooService', function($scope, FooService){ 
    FooService.getUsers() 
     .then(function (users) { 
     $scope.users = users; 
     }); 
    }); 

Вы можете дополнительно реорганизовать $resource('/users') в UserResource заводе и впрыснуть UserResource на службу.

+0

Спасибо за ответ Фрэнк, но, к сожалению, это тоже не работает. Мне нужен объект-пользователь, хранящийся в службе, потому что я делаю обновления для него, и поэтому я не могу каждый раз называть getUsers, потому что тогда обновлений там не будет – RandyMarsh