2017-04-17 9 views
0

私の角型アプリケーションには次のアーキテクチャがあります。特定のメソッドを1回だけ呼び出します。Angular JS

インデックスページ - >シェルページ - >ユーザビュー(ここからユーザーたちは、サブビューを開くことができます)

自分のアプリケーション上のすべてのルート変更は、シェルのページを経由します。シェルページでは、私はactivateという関数を持っています。この関数は、アプリケーションが初めて呼び出されたときに呼び出されるべきです。

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

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

ルーティングのチャンスがシェルページを通過するため、あるビューから別のビューに移動しているときでも、activateメソッドが呼び出されます。私はアプリケーションがルート変更のために読み込まれていないときに起動するメソッドを呼び出すようにしたいと思います。

これはどのように機能しますか?ありがとう。

答えて

1

activateメソッドのロジックをサービスに移動する必要があります。角度サービスはシングルトンです。したがって、必要な場所に注入されるオブジェクトは1つだけ作成されます。この方法で、時間の経過とともに単純な状態を維持することができます。

(function() { 
    'use strict'; 

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

    function UtilityService() { 
    var shouldActivate = true; 

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

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

次にシェルコントローラであなた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

関連する問題