Javascript 初始化Angular应用程序后立即注册事件侦听器

Javascript 初始化Angular应用程序后立即注册事件侦听器,javascript,angularjs,Javascript,Angularjs,我想编写一个Angular服务,在使用ngRoute模块的单页Angular应用程序中跟踪访问的URL。因此,我订阅了$routeChangeStart事件,并在回调中查询$location.url()函数: angular .module("myApplication") .factory("visitedUrls", visitedUrls); visitedUrls.$inject = ["$rootScope", "$location"]; function visi

我想编写一个Angular服务,在使用
ngRoute
模块的单页Angular应用程序中跟踪访问的URL。因此,我订阅了
$routeChangeStart
事件,并在回调中查询
$location.url()
函数:

angular
    .module("myApplication")
    .factory("visitedUrls", visitedUrls);

visitedUrls.$inject = ["$rootScope", "$location"];

function visitedUrls($rootScope, $location) {
    return {
        registerListener: function() {
            $rootScope.$on("$routeChangeStart", function() {
                var url = $location.url();
                // ...
            });
        }
    };
}
但是,在依赖项注入器第一次解析服务之前,上述方法不会注册事件侦听器,这太晚了。我还想跟踪之前访问过的所有URL

我当前的解决方法是在应用程序启动后立即使用角度注入器并调用
registerListener
方法:

$angular.element(document).ready(function() {
    angular.bootstrap(document, ["myApplication"]);

    var visitedUrls = angular.element(document).injector().get("visitedUrls");
    visitedUrls.registerListener();
});

我确信有一种更好的方法可以在初始化应用程序后立即将事件侦听器(从服务中)附加到
$rootScope
,对吗?

我相信您正在寻找的是


您可以根据需要对DI进行注释。

就这么简单。非常感谢。
angular.module('myApplication')
    .run(function(visitedUrls){
        visitedUrls.registerListener();
    });