下面显示的代码适用于我的目的,但我想确认这是否被认为是最佳做法。
我希望我的工厂在第一个实例中为配置文件信息发出http请求,但之后只需在后续请求中重复使用这些数据。
ProfileService.js
import _locale
_locale._getdefaultlocale = (lambda *args: ['en_US', 'utf8'])
我有两个控制器,然后使用ProfileFactory访问此数据的元素。
HomeController.js
utf8
ProfileController.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);
}
};
}]);
非常感谢任何有关此方法的反馈。
答案 0 :(得分:0)
我认为这是最好的方法。让服务返回给控制器使用的承诺是最好的关注点分离。
答案 1 :(得分:0)
是的,在服务中使用http呼叫是最好的。传统上我们持有承诺而不是数据,如下:
app.factory('ProfileService', ['$http', function($http) {
var profilePromise;
return {
getProfile: function() {
if (profilePromise === undefined) {
profilePromise = $http.get('url/to/profile.json');
}
return profilePromise;
}
};
}]);