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

Initialize Angular Service (factory) when application start

在我的 Angular 应用程序中,我添加了跟踪功能,它应该作为单独的插件工作,所以如果脚本包含在 HTML Angular 中应该创建服务并初始化(运行) 它。插件是服务,因为它对 $rootScope 具有强制依赖性。 对于实施,我 select 使用 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.js 文件中定义,例如:

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

代码运行良好。 runrunmyservice 调用都很好。应用程序和服务运行良好,但代码看起来很难看,尤其是将应用程序存储在全局 window 对象中并多播 run 函数。

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

您可以拨打angular.module('app').run(function(){...})。所以你将不再需要全局变量。

示例:

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