2014-10-29 75 views
1

我想编写一个Angular服务来跟踪访问的URL在单个页面内使用ngRoute模块的Angular应用程序。因此,我订阅$routeChangeStart事件和回调中查询$location.url()功能:在初始化Angular应用程序后立即注册事件侦听器

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(); 
       // ... 
      }); 
     } 
    }; 
} 

然而,上述方法将不会注册事件侦听器,直到该服务已经由依赖注入,第一次解决 - 这太迟了。我也想跟踪之前访问过的所有网址。

我目前的解决方法得到角注射器的保持和调用registerListener方法应用已自举后,立即:

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

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

我敢肯定有一个更好的方法来附加一个事件监听器(从内一个服务)到$rootScope刚刚初始化一个应用程序,对吧?

回答

2

我相信你正在寻找的是.run(...)

angular.module('myApplication') 
    .run(function(visitedUrls){ 
     visitedUrls.registerListener(); 
    }); 

你可以,但是你想注释DI。

+0

就这么简单。谢谢! – 2014-10-29 15:20:14

相关问题