推荐的方法来处理服务和控制器之间的AngularJS Promises

时间:2015-12-17 22:04:35

标签: javascript angularjs

下面显示的代码适用于我的目的,但我想确认这是否被认为是最佳做法。

我希望我的工厂在第一个实例中为配置文件信息发出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);
        }
    };
}]);

非常感谢任何有关此方法的反馈。

2 个答案:

答案 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;
        }
    };
}]);