我有一项名为MyArticles
的服务。使用$http GET
,收集给定类别的所有文章。 MyArticles
服务注入了ControllerA
,ControllerB
,ControllerC
,应在MyArticles Promise
解析后运行一些命令。
首次初始化后工作,但我不知道如果我需要重置()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/
我想知道我能做什么,如果我需要一个服务 - 使用promises - 应该能够刷新数据并且服务被注入不同的控制器等等?
感谢您的期待!
答案 0 :(得分:3)
另一种选择是使用手表。见:http://plnkr.co/edit/auovRxGPViyflUVPvG1A?p=preview。与$ emit / $ broadcasts相比,它可能更容易维护,特别是如果你最终拥有大量服务以及使用它们的指令和控制器。
另外,您可能想要考虑使用自然范围继承angular has,但这取决于您的应用程序。