Провайдер в лениво загруженных модулях - PullRequest
0 голосов
/ 27 марта 2020

Я создал новый Angular проект с лениво загруженным модулем (LazyModuleModule).

Stackblitz: ЗДЕСЬ

Этот модуль загружен в модуль маршрутизации с отложенной загрузкой :

   loadChildren: () => import('../app/lazy-module/lazy-module.module').then(m => m.LazyModuleModule)

Сам ленивый модуль не имеет компонентов или каких-либо директив. Он импортирует только другой загруженный модуль «EagerModule» с одним компонентом (ShowComponent).

В этом компоненте я хочу внедрить службу (TestService), которая является производной от абстрактной службы «TestAbstractService».

Я теперь предоставил TestServiceAbstract в EagerModule:

{provide: TestServiceAbstract, useClass: TestService}

Но при компиляции проекта я получаю сообщение errorMessage: «Не удается разрешить все параметры для ShowComponent».

Я действительно это делаю Не вижу никаких причин, почему этот подход не должен работать. Если я предоставляю TestService прямо в app.module, все работает, но это странно для меня.

Подсказка: Чтобы увидеть сообщение об ошибке в stackblitz, вам нужно открыть консоль и нажать на текст «что-то волшебное c произойдет». Маршрутизация к компоненту с ошибкой.

1 Ответ

1 голос
/ 28 марта 2020

Импорт для ' TestServiceAbstract ' не выполняется в ShowComponent . Вы импортировали ' TestService ' вместо ' TestServiceAbstract ' в ShowComponent .

Добавьте правильный импорт для TestServiceAbstract, который вы вводите в конструктор:

import { TestServiceAbstract } from '../../abstract.test.service';

Пожалуйста, замените show.component.ts на приведенный ниже код. Это должно работать:

import { Component, OnInit } from '@angular/core';
import { TestServiceAbstract } from '../../abstract.test.service';

@Component({
   selector: 'app-show',
   templateUrl: './show.component.html',
   styleUrls: ['./show.component.css']
})
export class ShowComponent implements OnInit {

   constructor(public testService: TestServiceAbstract) { }

   ngOnInit() {
     alert(this.testService.getNumber())
   }
}

Показать компонент с предупреждением

...