处理服务和控制器之间AngularJS Promises的推荐方法
Recommended way to handle AngularJS Promises between Service and Controllers
下面显示的代码适用于我的目的,但我想确认这是否被视为最佳实践。
我希望我的工厂在第一个实例中对配置文件信息发出http请求,但在随后的请求中只需重用这些数据。
ProfileService.js
app.factory('ProfileService', ['$http', '$q', function($http, $q) {
var profile;
return {
getProfile: function() {
if (profile === undefined) {
return $http.get('url/to/profile.json').then(function(response) {
profile = response;
return profile;
});
}
return $q.when(profile);
}
};
}]);
我有两个控制器,然后利用ProfileFactory访问这些数据的元素。
HomeController.js
app.controller('HomeController', ['ProfileService', function(ProfileService) {
var self = this;
ProfileService.getProfile().then(function(result) {
self.name = result.name;
self.showAlert = result.showAlert;
});
}]);
ProfileController.js
app.controller('ProfileController', ['ProfileService', function(ProfileService) {
var self = this;
ProfileService.getProfile().then(function(result) {
self.profile = result;
self.profile.showAlert = false;
});
}]);
我们将非常感谢对这种方法的任何反馈。
我认为这是最好的方法。让服务返回控制器使用的承诺是imo的最佳关注点分离。
是的,最好在服务中使用http调用。传统上,我们持有承诺而不是数据,比如:
app.factory('ProfileService', ['$http', function($http) {
var profilePromise;
return {
getProfile: function() {
if (profilePromise === undefined) {
profilePromise = $http.get('url/to/profile.json');
}
return profilePromise;
}
};
}]);
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 可以简化嵌套的延迟Q Promises解析吗
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- toBoolean方法类似于toString
- 如何在单击复选框后调用控制器方法
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- 当使用Q/promises/异步函数时,如何将一个值从一个类方法返回到另一个类
- 处理服务和控制器之间AngularJS Promises的推荐方法
- Promises:对一个递归方法进行单元测试,该方法在队列中一个接一个地触发promise