AngularJS启动时模块中的调用方法

时间:2018-06-20 01:10:30

标签: angularjs

在我的AngularJS应用程序启动期间,我是否可以对模块返回的对象调用方法?

这是我的模块:

angular.module('features', [])
    .factory('features', ['cookies', 'lib', function(cookies, lib) {
        return {
            init: function() {
                lib.customer(cookies.get('customer')).then(function (enabled) {
                    this.feature = enabled;
                });
            },

            feature: false,
        };
}]);

在我的app.js文件中,如果我有类似的内容:

var app = angular
    .module('app', [
        'features'
    ]);

然后我该怎么做:features.init()

以便以后再使用features.feature来获取键值对的布尔值?

1 个答案:

答案 0 :(得分:2)

按照书面规定,工厂会在其初始化与在控制器中使用之间创建竞争条件。

将其重写以返回承诺:

angular.module('features', [])
.factory('features', ['cookies', 'lib', function(cookies, lib) {
    var enabledPromise = init();
    return {
        enabled: function() {
            return enabledPromise;
        }
    };
    function init() {
         return (
             lib.customer(cookies.get('customer'))
             .then(function(enabled) {
                 console.log(enabled)
                 return enabled;
              }).catch(function(error) {
                 console.log(error);
                 throw error;
              })
         );
     }
}]);

用法

features.enabled().then(function(enabled) {
    console.log(enabled);
});

该服务还可以在路由器的resolve功能中使用,以延迟视图的加载。