2016-03-28 19 views
0

Tüm bileşenimde @CanActivate(() => checkpermission())'u kullanmayı seviyorum. Burada bir sorunla karşı karşıyayım. Genel olarak işlevi nasıl bildirmekAngular2 Genel işlev bildirimini devre dışı bırakma

. Global işlev için şimdi hizmetleri kullanıyorum. Mümkün Sen bu şekilde küresel yapabilirsiniz

@CanActivate(() => checkpermission()) 

cevap

1

iç hizmet işlevini çağırmak için mi

NOT: Bu (muhtemelen gerekmez) bazı ekstra maddeleri içerebilir ans. Böylece, ihtiyacınız olan şeylere konsantre olabilir ve diğer istenmeyen maddeleri görmezden gelebilirsiniz. Bunu daha küresel senaryoyu dikkate alarak ans koyduk (örn - ne checkpermission fonksiyonu içine bazı dış hizmet enjekte etmek istiyorsanız)

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. tc

Bazı bileşenlerde che'yi kullanabilirsiniz. Böyle,

import {checkpermission} from './checkpermission'; 

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


app-injector.ts

import {Injector} from 'angular2/core'; 

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

    return appInjectorRef; 
}; 

Ben Sana gereksinimi karşılamak umut ckpermission.ts.

+0

Çok çalışıyoruz –

+0

Welcom @ deepk. Lütfen ihtiyaçlarınıza göre kullanın. Bu ans bazı ekstra şeyler içerebilir (sadece küresel senaryoyu göz önünde bulundurarak referans için). – micronyks

+0

okay @micronyks. Bu global işlevi sınıf içi parametresiyle çağırmak mümkün mü? –

İlgili konular