我可以将服务注入 CanActivate 吗?
Can I inject a service into CanActivate?
与其他挂钩不同,CanActivate 是一个与组件分离的函数。
import 'dart:async';
import 'package:angular2/core.dart';
import 'package:angular2/router.dart';
@Component(selector: 'my-app', template: '<h1>Hello World!</h1>')
@CanActivate(someGuard)
class HelloComponent {}
FutureOr<bool> someGuard(ComponentInstruction next, ComponentInstruction prev) {
return true;
}
AFAIK,可以在 bootstrap 时间拦截根注入器并将其分配给全局变量,这样我就可以在任何地方访问它。 IMO,这听起来像是黑客攻击,我不喜欢它。有没有正确的方法在 CanActivate 挂钩中注入服务?
Angulars DI 仅支持构造函数注入。 @CanActivate()
是注释,因此不支持 DI。
虽然有一个解决方法。
在库中创建一个变量并导入它
Injector injector;
在创建应用程序时分配注入器
bootstrap(App, [
Auth,
HTTP_PROVIDERS,
ROUTER_PROVIDERS,
provide(LocationStrategy, useClass: HashLocationStrategy)
]).then((appRef: ComponentRef) => {
// store a reference to the application injector
injector = appRef.injector;
});
然后您可以使用注入器导入库并从代码someGuard()
访问它
与其他挂钩不同,CanActivate 是一个与组件分离的函数。
import 'dart:async';
import 'package:angular2/core.dart';
import 'package:angular2/router.dart';
@Component(selector: 'my-app', template: '<h1>Hello World!</h1>')
@CanActivate(someGuard)
class HelloComponent {}
FutureOr<bool> someGuard(ComponentInstruction next, ComponentInstruction prev) {
return true;
}
AFAIK,可以在 bootstrap 时间拦截根注入器并将其分配给全局变量,这样我就可以在任何地方访问它。 IMO,这听起来像是黑客攻击,我不喜欢它。有没有正确的方法在 CanActivate 挂钩中注入服务?
Angulars DI 仅支持构造函数注入。 @CanActivate()
是注释,因此不支持 DI。
虽然有一个解决方法。
在库中创建一个变量并导入它
Injector injector;
在创建应用程序时分配注入器
bootstrap(App, [
Auth,
HTTP_PROVIDERS,
ROUTER_PROVIDERS,
provide(LocationStrategy, useClass: HashLocationStrategy)
]).then((appRef: ComponentRef) => {
// store a reference to the application injector
injector = appRef.injector;
});
然后您可以使用注入器导入库并从代码someGuard()