ngZone未定义 - 仅在Injectable AOT模式下注入失败

时间:2018-05-07 21:39:31

标签: angular

我遇到了一个奇怪的问题。

我有一个NotificationService调用Bootstrap notify来显示一些咆哮样式的消息。我试图在构造函数中注入ngZone。这在JIT模式下工作,但在AOT模式下失败,并且“无法调用runOutSideAngular()未定义”。进一步调试显示构造函数注入在AOT模式下失败,但在Dev(JIT)模式下注入良好。

但是,我也在我的app.component.ts中注入了ngZone,并且它在AOT和JIT都注入了很好。

顺便说一下,服务作为根模块中的提供者加载。我无法弄清楚为什么注射失败了。我也尝试使用@Inject(NgZone)进行explict注射,并尝试使用forwardRef推迟注射无效。

在Dev / JIT中:

In Dev/JIT mode 在Prod / AOT:

In AOT mode

这是我的NotificationService:

  export namespace Notification {
  @Injectable()
  export class NotificationService {
    notifier: any;

    constructor(private ngZone: NgZone) {
      console.log('message from NotificationService constructor ngZone is ', this.ngZone);
    }

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

对于任何想要了解导致此问题的人 - 这是由于命名空间。无论出于何种原因,如果类在命名空间内,则注入不起作用。不确定这是否是Angular本身的问题。我必须删除命名空间,然后注入正常工作 - 不理想,因为我想使用命名空间,但我可以忍受它。