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

Gri*_*rii 4 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 () { ... } 
    }
}
Run Code Online (Sandbox Code Playgroud)

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

window.app.run(['mysevice', function (srvc) {
        srvc.run();
    }]);
Run Code Online (Sandbox Code Playgroud)

app在单独的主app.js文件中定义的位置如下:

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

代码工作正常.这两个主要runrun用于myservice通话的罚款.应用程序与服务一起运行良好,但代码看起来很难看,特别是将应用程序存储在全局窗口对象中并组播该run功能.

是否有更好的方法来执行Angular服务并在应用程序启动后立即初始化它与其他一些Angular服务依赖项.

Wéd*_*uri 7

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

例:

angular.module('app').run(['mysevice', srvc.run.bind(srvc)]);
Run Code Online (Sandbox Code Playgroud)