2016-03-28 30 views
0

すべてのコンポーネントに@CanActivate(() => checkpermission())を実装したいと思います。ここで私は1つの問題に直面しています。Angular2 CanActivateグローバル関数宣言

checkpermission is not a function 

関数をグローバルに宣言する方法。グローバルな機能のために、私は今サービスを利用しています。

@CanActivate(() => checkpermission()) 

答えて

1

内のサービス機能を呼び出すことが可能であるあなたは、この方法にはグローバル

注を行うことができます。これは(おそらくあなたが必要としません)いくつかの余分な原料が含まれていてもよいANS。だから、あなたが必要とするものに集中し、他の必要のないものは無視することができます。私は、これはよりグローバルなシナリオを考慮してANS入れている(例えば - あなたは何のcheckPermission機能にいくつかの外部サービスを注入する場合)

checkpermission.ts

import {Injector} from 'angular2/core'; 
import {appInjector} from './app-injector'; 
import {externalService} from './externalService'; <---------------------- //some external service 
import {Router, ComponentInstruction} from 'angular2/router'; 

export const checkpermission= (next: ComponentInstruction, previous: ComponentInstruction) => { 

    let injector: Injector = appInjector(); // get the stored reference to the injector 
    let externalService: externalService= injector.get(externalService); 
    let router: Router = injector.get(Router); 

    // return a boolean or a promise that resolves a boolean 

    return new Promise((resolve) => { 

         //here you can play with externalService 

         if(something is true) 
          resolve(true); 
         else 
          resolve(false); 

    }); 
}; 


somecomponent。 ts

somecomponentではche ckpermission.tsこのような

import {checkpermission} from './checkpermission'; 

@CanActivate((next: ComponentInstruction, previous: ComponentInstruction) => { 
     return checkpermission(next, previous);   
}) 


アプリ-injector.ts

import {Injector} from 'angular2/core'; 

let appInjectorRef: Injector; 
export const appInjector = (injector?: Injector):Injector => { 
    if (injector) { 
     appInjectorRef = injector; 
    } 

    return appInjectorRef; 
}; 

私はそれはあなたの要件を満たすことを願っています。

+0

ありがとうございました –

+0

あなたはウェルカム@deepkです。あなたの必要に応じてそれを使用してください。このansには、余分なものがいくつか含まれている可能性があります(グローバルシナリオを参考にして参考にしてください)。 – micronyks

+0

大丈夫@micronyks。クラス内のパラメータでこのグローバル関数を呼び出すことは可能ですか? –