Angular 6, вводящий токен окна в библиотечном сервисе - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть библиотека, в которой есть код из этого поста на сайте: https://brianflove.com/2018/01/11/angular-window-provider/

В моей библиотеке также есть служба, в которой я хочу получить доступ к объекту окна.Однако добавление следующего в конструктор не работает:

@Inject(WINDOW) private window: Window

При попытке построить библиотеку с помощью cli возникает следующая ошибка:

Собранные метаданные содержатошибка, о которой будет сообщено во время выполнения: не удалось разрешить тип Window.

Я могу изменить его на использование любого типа вместо Window или добавить @dynamic в качестве комментария, после чего он будет строить нормально.Есть ли лучший способ сделать это?

Я не уверен, что это даже правильный способ сделать это, поскольку он также полагается на потребителя, чтобы он установил WINDOW_PROVIDERS в своем массиве поставщиков основного модуля приложения.

1 Ответ

0 голосов
/ 08 марта 2019

Я пользуюсь тем же сервисом и внедряю его так:

@Inject(WINDOW) private _window: Window

Обратите внимание на знак подчеркивания ('_') перед переменной окна.Я подозреваю, что вы не можете назвать переменное окно, потому что это будет конфликтовать со встроенным объектом окна браузера.Кроме этого, убедитесь, что вы импортируете токен впрыска в свой компонент / сервис следующим образом:

import { WINDOW } from '[path to your services]/window.service';

И в вас app.module.ts (или в любом другом модуле, в котором вы его используете):

import { WINDOW_PROVIDERS } from '[path to your services]/window.service';
...
  providers: [
    WINDOW_PROVIDERS
  ]
...
...