2017-04-17 68 views
0

我的角度應用程序有以下體系結構。只調用一次特定的方法Angular JS

索引頁面 - >貝殼頁面 - >用戶視圖(從這裏,用戶可以我們打開子視圖)

在我的應用程序的所有路由變化經歷殼牌頁。在shell頁面上,我有一個叫做activate的函數,只有在第一次調用應用程序時才應該調用它。

//This function primarily displays a toaster saying the application is loaded. 

    function activate() { 
       logger.success(config.appTitle + ' loaded!', null); 
    } 

由於路由機會通過shell頁面,因此即使從一個視圖移動到另一個視圖,激活方法也會被調用。我想激活方法只在應用程序加載時不是用於路由更改時才被首次調用。

我如何得到這個工作?謝謝。

回答

1

您應該將activate方法的邏輯移至服務。角度服務是單身人士。所以只有一個被創建的對象被注入到需要的地方。通過這種方式,您可以在一段時間內堅持一些簡單的狀爲簡單起見假設你有一個通用的實用服務:

(function() { 
    'use strict'; 

    angular 
    .module('myApp') 
    .service('UtilityService', UtilityService); 

    function UtilityService() { 
    var shouldActivate = true; 

    this.activateComplete = function(){ 
     shouldActivate = false; 
    } 

    this.canActivate = function(){ 
     return shouldActivate; 
    } 
    } 
})(); 

然後在外殼控制器,你會說這就是UtilityService和檢查,如果你canActivate,如果是的話它會運行激活功能,然後調用completeActivate功能UtilityService。現在任何後續檢查canActivate將返回false:

(function() { 
    'use strict'; 

    angular 
    .module('myApp') 
    .controller('ShellController', ShellController); 

    /** @ngInject */ 
    function ShellController(UtilityService) { 
    var vm = this; 

    vm.activate = activate() { 
     logger.success(config.appTitle + ' loaded!', null); 
    } 

    if(UtilityService.canActivate()){ 
     vm.activate(); 
     UtilityService.activateComplete(); 
    } 
    } 
})(); 
+0

這正是我所期待的。謝謝。 – Naga

+0

不客氣。 – Sasang