应用程序启动时初始化角度服务(工厂)

时间:2015-05-29 17:47:09

标签: javascript angularjs angularjs-service angularjs-factory

在我的Angular应用程序中,我添加了跟踪功能,它应该作为单独的插件工作,因此如果HTML Angular中包含的脚本应该创建服务并初始化(运行)它。插件是服务,因为它强制依赖$rootScope。 为了实现,我选择使用Angular工厂,例如(代码在myservice.js中):

angular.module('app').factory('mysevice', ['$rootScope', '$interval', serviceFunc]);

function serviceFunc($rootScope, $interval) {

    return {
        run: function () { ... } 
    }
}

现在我有问题如何立即初始化它。我的解决方案是增强Angular app run函数(代码在myservice.js中):

window.app.run(['mysevice', function (srvc) {
        srvc.run();
    }]);

app在单独的主app.js文件中定义,例如:

var app = window.app = angular.module('app', [...]);
app.run(['$state', 'breeze', ...,
function ($state,  breeze, ...) { ..real initialization..  }

代码运行正常。 run调用的runmyservice主要都可以。应用程序与服务一起运行良好,但代码看起来很难看,尤其是将应用程序存储在全局窗口对象中并组播run函数。

有没有更好的方法来执行Angular服务并在应用程序启动后立即对其他一些Angular服务依赖项进行初始化。

1 个答案:

答案 0 :(得分:7)

您可以致电angular.module('app').run(function(){...})。所以你不再需要一个全局变量了。

示例:

angular.module('app').run(['mysevice', srvc.run.bind(srvc)]);