如何在返回承诺的服务中创建 reset() 方法
How to create reset() method in Service that return promise?
我有一个名为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/
我想知道我能做什么,如果我需要一个服务 - 使用承诺 - 应该能够刷新数据并且服务正在注入不同的控制器等?
感谢您的观看!
另一种选择是使用手表。请参阅:http://plnkr.co/edit/auovRxGPViyflUVPvG1A?p=preview。与以后的 $emit/$broadcasts 相比,它可能更容易维护,特别是如果您最终拥有大量服务以及使用它们的指令和控制器。
此外,您可能要考虑使用自然范围继承角度,但这取决于您的应用程序。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 为effect Composer创建GodRays效果过程
- 从javascript创建一个列表
- onkeyup无法动态创建多个文本区域
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何访问声音管理器2创建的声音对象
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 使用Facebook live API创建实时视频对象时的隐私设置
- 在动态创建的元素上获取对特定选择器的引用
- 如何创建带有插槽的vue js组件预加载程序
- 如何在创建键时引用来自同一对象的键
- 如何创建JSON数组
- 从html创建一个指令,该指令按类名应用函数
- 使用Javascript创建测验页面
- 更改使用Chart.js创建的图表中的轴线颜色
- JavaScript名称空间和对象创建
- JQuery对动态创建的对象进行选择
- 创建带有和不带有JavaScript的Bootstrap下拉菜单
- 如何在返回承诺的服务中创建 reset() 方法