Angular 6 - создание (не root) модуля с областью обслуживания - PullRequest
0 голосов
/ 09 мая 2018

Насколько я знаю до угла 6, все провайдеры @Ngmodule были зарегистрированы на корневом инжекторе и обслуживались в основном комплекте, даже если их использовали только лениво загруженные модули.

Единственным исключением из этого было то, что мы хотели создать не одноэлементные сервисы на уровне компонента .

Я хочу создать одноэлементный сервис, который будет виден только определенному модулю (не корневому модулю), и в результате этого не будет обслуживаться в основном загруженном пакете.

В пиле, что в угловом 6 модулю больше не нужно будет ссылаться на услугу через «провайдеров», а скорее сервис теперь будет ссылаться на модуль.

Это можно сделать с помощью аннотации @Injectable и атрибута provideIn.

Я не нашел хорошего и ясного примера того, как я могу добавить имя модуля, которое не является «root», что-то вроде этого:

@Injectable({ provideIn: <MyLocalModule>})
export class SimpleServiceForLocalUseOnly { […] }

Импорт модуля LazyLoaded и запись его как «MyLocalModule» в приведенном выше фрагменте кода вызывает ПРЕДУПРЕЖДЕНИЕ о циклической зависимости. Я могу решить эту проблему, переместив службу в другой модуль, но тогда я теряю свою первоначальную цель.

Список найденных ссылок:

https://blog.angular.io/version-6-of-angular-now-available-cc56b0efa7a4

https://jaxenter.com/new-angular6-143995.html

https://www.ngdevelop.tech/angular-6-features/

https://blog.ninja -squad.com / 2018/05/04 / что-это-новый-угловой-6 /

http://ankitsharmablogs.com/getting-started-with-angular-6-0/

https://www.youtube.com/watch?v=Xr5l7lT--YU

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Чтобы предоставить службу в определенном модуле с использованием более нового синтаксиса, вы просто делаете что-то вроде этого:

import { Injectable } from "@angular/core";
import { YourModule } from "path/to/your.module";

@Injectable({
    providedIn: YourModule
})
export class SomeModuleScopedService {}

ссылка: https://angular.io/guide/providers#providedin-and-ngmodules

0 голосов
/ 09 мая 2018

Кажется, что есть некоторые проблемы, связанные с циклической зависимостью, если мы следуем этой настройке в соответствии с официальными документами :

import { Injectable } from '@angular/core';
import { HeroModule } from './hero.module';
import { HEROES }     from './mock-heroes';

@Injectable({
  // we declare that this service should be created
  // by any injector that includes HeroModule.

  providedIn: HeroModule,
})
export class HeroService {
  getHeroes() { return HEROES; }
}

Вы можете игнорировать предупреждения, которые вызывает компилятор из-зациклическая зависимость между модулем, сервисом и компонентом.Или откат к предыдущим методам, использованным в Angular 5.

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

@NgModule({
  imports: [
    RouterModule.forChild([{ path: '', component: LazyComponent }]),
  ],
  declarations: [
    LazyComponent
  ],
  providers: [YourServiceHere]
})
export class LazyLoadedModule { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...