Angular2 CanActivate 全局函数声明

Angular2 CanActivate global function declaration

我喜欢在我的所有组件中实现 @CanActivate(() => checkpermission())。我现在面临一个问题。

checkpermission is not a function

如何全局声明函数。对于全局功能,现在我正在使用服务。里面是否可以调用服务函数

@CanActivate(() => checkpermission())

您可以通过这种方式将其设为全局,

注意:这个 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

在某些组件中,您可以像这样使用 checkpermission.ts

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;
};

希望能满足您的要求。