我有一个名为MyArticles
的服务。使用$http GET
收集给定类别的所有文章。将MyArticles
服务注入到ControllerA
,ControllerB
,ControllerC
中,在解析MyArticles Promise
之后,该服务应运行一些命令。
首次初始化后可以工作,但是如果需要对MyArticles的加载数据进行reset()重置,我不知道该怎么办,因为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/
我想知道如果我需要使用诺言的服务,该服务应该能够刷新数据并且将服务注入到不同的Controller等中,该怎么办?
感谢您的光临!
最佳答案
另一种选择是使用手表。请参阅:http://plnkr.co/edit/auovRxGPViyflUVPvG1A?p=preview。与以后的$ emit / $ broadcast相比,维护起来可能更容易,尤其是如果您最终拥有大量的服务以及使用它们的指令和控制器时。
另外,您可能想考虑使用角度继承继承的自然作用域,但这取决于您的应用程序。