我可以将服务注入CanActivate吗?

时间:2017-04-02 08:49:47

标签: dart angular-dart

与其他钩子不同,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时拦截根注入器并将其分配给全局变量,以便我可以在任何地方访问它。国际海事组织,这听起来像一个黑客,我不喜欢它。有没有一种在CanActivate钩子中注入服务的正确方法?

1 个答案:

答案 0 :(得分:2)

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()

访问它