У меня есть услуга под названием MyArticles
. Используя $http GET
, собирает все статьи для данной категории. Служба MyArticles
впрыскивается в ControllerA
, ControllerB
, ControllerC
, которая должна запускать некоторые команды после того, как MyArticles Promise
будет разрешен.Как создать метод reset() в сервисе, который возвращает обещание?
Работает после первой инициализации, но я не знаю, что делать, если мне нужно сбросить() загруженные данные для MyArticles, так как команды в ControllerA, ControllerB, ControllerC
запускаются только в первый раз после того, как обетование будет разрешено. Например, что делать, если я хочу получать статьи из другой категории?
Я пытаюсь найти шаблон для этого, и я написал следующее, я предполагаю, что это помогает понять, что я хотел бы достичь:
var MyApp = angular.module('MyApp', []);
MyApp.config(function($locationProvider){
$locationProvider.hashPrefix('!');
});
MyApp.factory('MyService', function($q,$timeout){
var deferred;
var loadData = function(){
deferred = $q.defer();
$timeout(function(){
deferred.resolve({
myData: "test"
});
}, 250);
};
return {
reset: function(){
loadData();
},
getPromise: function(){
return deferred.promise;
}
};
});
MyApp.controller('MyCtrl', function($scope,MyService){
$scope.foo = "Service share data";
MyService.reset();
MyService.getPromise().then(function(data){
console.log(data);
});
});
* пример также доступен по адресу: http://jsbin.com/OCaNehe/2/
Интересно, что я могу сделать, если мне нужна услуга - с использованием обещаний - что должно быть в состоянии обновить данные, а служба вводится в разные контроллеры и т. Д.?
Спасибо, что посмотрели!
Если вы хотите разрешить разные значения друг за другом, Promise - это неправильный шаблон, поскольку он представляет только одно значение. Посмотрите на что-то вроде потоков :-) Или просто реализуйте шаблон наблюдателя, который уже встроен в углы ... – Bergi
@Bergi спасибо за то, что посмотрели! Я буду искать потоки :) И, конечно же, я доберусь до шаблона наблюдателя – punkbit
@Bergi на самом деле, теперь мне интересно, что делать в контроллерах, если я не могу использовать шаблон обещания. Я могу запускать команды только в том случае, если данные доступны. Я попробую $ watch, но не уверен, что это сработает! Большое спасибо – punkbit