2016-07-28 89 views
-1

我有一個函數validateSesion,每次執行控制器時都需要調用它。如何在AngularJs中的所有控制器中調用函數

有一種方法可以觸發該功能,而無需在所有控制器中調用該函數?

+0

請發表你試過嗎? –

+0

你確定*每次控制器被實例化時你想調用一個函數嗎?在頁面上使用多個控制器是很常見的做法,這可能意味着比所期望的功能多得多的調用... – Claies

+0

這可能更有可能是您希望爲用戶訪問的每個新頁面執行的功能,與每次實例化控制器都不相同。這種任務通常在您使用的任何路由器內完成。 – Claies

回答

1

我建議完成此類調用的方法是爲您的路由更改創建事件處理程序。這樣每次你改變你的路線或狀態(如果你正在使用UI路由器),你可以運行你的代碼。

您會將這在你的應用程序的運行功能和附加事件處理程序到$ rootScope如下圖所示:

angular.module('app', [ 
    //Your Dependencies Here 

    ]).run(init); 

function init($rootScope, sessionService) { 
    //ngRoute 
    $rootScope.$on('$routeChangeStart', function (angularEvent, next, current) { 
     sessionService.validateSession(); 
    }); 

    //ui-router 
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) { 
     sessionService.validateSession(); 
    }); 
} 
相關問題