ngZone не определено - ошибка впрыска только в режиме инъекционного AOT - PullRequest
0 голосов
/ 08 мая 2018

У меня странная проблема.

У меня есть NotificationService, который вызывает уведомление Bootstrap, чтобы показать некоторые сообщения в стиле рычания. Я пытаюсь ввести ngZone в конструкторе. Это работает в режиме JIT, но не работает в режиме AOT с «невозможно позвонить runOutSideAngular() из неопределенного». Дальнейшая отладка показывает, что инжекция конструктора завершается неудачно в режиме AOT, но в режиме Dev (JIT) вводится нормально.

Тем не менее, я также ввожу ngZone в мой app.component.ts, и он отлично впрыскивается здесь и в AOT, и в JIT.

Кстати, Сервис загружен в качестве провайдера в корневой модуль. Я не могу понять, почему Инъекция терпит неудачу. Я также пытался использовать инъекцию explict с помощью @Inject (NgZone), а также пытался отложить инъекцию с использованием forwardRef, но безрезультатно.

В Dev / JIT:

In Dev/JIT mode В Prod / AOT:

In AOT mode

Вот мой сервис уведомлений:

  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 голосов
/ 07 июня 2018

Для всех, кто хочет знать проблему, вызвавшую это - это было связано с пространствами имен. По любой причине внедрение не работает, если класс находится в пространстве имен. Не уверен, что это проблема самого Angular. Мне пришлось удалить пространство имен, после чего внедрение работало как обычно - не идеально, так как я хотел использовать пространства имен, но я могу жить с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...