NullInjectorError: нет провайдера для оверлея! NgxToastr

Последний день я чесал затылок по этому поводу. Я использую пакет Ngx-Toastr в своем приложении angular. Ниже приведены пункты, которые, как мне кажется, помогут вам разобраться в проблеме.

  1. На сервере разработки (ng serve) я не получал никаких ошибок, не было проблемы с Nullinjector, затем я делаю производственную сборку, используя следующую команду (ng build). До этого момента все работает нормально. Теперь мне нужно оптимизировать размер пакета, поэтому я запустил это (ng build --prod). Сборка прошла успешно, ошибок нет. Теперь пора выполнить код (для этого я использую сервер Node). Здесь проблема начинается -

  2. Сначала он просит

'NullInjectorError: Нет провайдера для ToastrService'

который поступает из самого пакета Ngx-Toastr, и это имеет смысл, поэтому я добавляю эту службу в модули приложений, а также в другие модули с отложенной загрузкой в ​​массиве поставщиков. Итак, после этого ошибка исчезла. Но следующее, о чем я хочу поговорить -

  1. Затем он запрашивает "NullInjectorError: No provider for Overlay!" Итак, я решил, что из пакета должна быть эта услуга, которую нужно добавить в массив поставщиков. Поэтому я попытался импортировать его из самого пакета и добавить в массив поставщиков, как показано ниже:

import {Overlay} из 'ngx-toastr / overlay / overlay' ;;

при этом возникла ошибка ниже

Модуль не найден: ошибка: не удается разрешить ngx-toastr / overlay / overlay

  1. Затем я попытался найти эту проблему и нашел несколько решений stackoverflow, которые предлагают добавить следующую строку:

импортировать {OverlayModule} из '@ angular / cdk / overlay';

Я добавил этот модуль в массив импорта каждого модуля. Ничего не изменилось.

Теперь я понятия не имею, что импортировать и куда импортировать. И я также не уверен, правильно я иду или нет, и с чего мне начать изучать это. Я также сомневаюсь, что эта ошибка исходит из того пакета или чего-то еще !! причина Он должен работать без неявного импорта этих сервисов.

Я запускаю следующую команду, чтобы получить сообщение об ошибке перед производственной сборкой:

ng serve --prod --optimization = false

Также укажите, как отлаживать следующую ошибку, когда-то после производственной сборки мы получаем такую ​​ошибку, которая, несомненно, не имеет смысла:

ERROR Ошибка: StaticInjectorError [t - ›t]: StaticInjectorError (Platform: core) [t -› t]: NullInjectorError: Нет провайдера для t!

Надеюсь, мое объяснение имеет для вас какой-то смысл. Спасибо за ваше время и извините за этот длинный вопрос.

Наконец, к сведению: я уже удалил модули узлов и переустановил их.


person Souradip    schedule 11.08.2020    source источник
comment
Зарегистрируйте все, что он вызывает, в своем app.module.ts   -  person mwilson    schedule 11.08.2020
comment
@mwilson Я не понял твоей мысли. Не могли бы вы быть более наглядными?   -  person Souradip    schedule 11.08.2020
comment
@Souradip, у нас точно такая же проблема, за исключением сборки разработчика. Но похоже, что после понижения версии версия была отсортирована. Если вы используете версию 13.0.0, попробуйте установить 12.1.0   -  person Steven.Xi    schedule 13.08.2020


Ответы (1)


Убедитесь, что вы используете версию ngx-toastr, совместимую с вашей версией angular и typescript. https://github.com/scttcper/ngx-toastr#dependencies

ngx-toastr v13 требует angular ›= 10

person scttcper    schedule 13.08.2020
comment
Спасибо за Ваш ответ. Теперь я установил подходящий пакет, но получаю ту же ошибку NullInjector. Есть ли способ проверить совместимость других пакетов с версией Angular? кто-то мог ошибочно установить неправильную версию некоторых других пакетов. И как лучше всего отладить такую ​​ошибку. Теперь я запускаю свой проект с настройкой оптимизации на false в angular.json, но это вызывает у меня большой размер пакета. Спасибо за ваше время - person Souradip; 19.08.2020
comment
если у вас нет модулей package-lock или node, при первой установке npm должен перечислить все предупреждения с одноранговыми зависимостями - person scttcper; 19.08.2020