2014-10-29 73 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

相關問題