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;
};
希望能满足您的要求。
我喜欢在我的所有组件中实现 @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;
};
希望能满足您的要求。