Угловая зависимость 6/7 между библиотеками - PullRequest
0 голосов
/ 23 октября 2018

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

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

Чтобы попытаться прояснить ситуацию, я приведу вам пример моей ситуации.

У меня уже есть SharedModule с некоторыми независимыми компонентами, которые используются в других модулях, тогда у меня также есть модуль для каждой службы API.Итак, у меня есть UsersModule, «AdministrationModule» и тому подобное.Моя проблема с PlantModule и FleetModule.

  • Завод как на электростанции
  • Флот, как в группе заводов и / или других флотов, но также имеет свои свойства

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

FleetsModule также имеет компонент для списка парков и один для деталей.В этом подробном компоненте есть также внешние компоненты, такие как назначенные пользователи, список вспомогательных флотов и список заводов, входящих в состав флота.

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

Есть идеи о том, что я делаю неправильно или как это решить?

ОБНОВЛЕНИЕ

Чтобы решить эту проблему, я изменил структуру «страниц», где нужны эти компоненты.Поэтому вместо того, чтобы импортировать повторно используемые компоненты внутри других компонентов в библиотеках, я создаю представление обертки в основном приложении и импортирую все, что мне нужно.

1 Ответ

0 голосов
/ 23 октября 2018

Итак, у вас есть три модуля: DeskModule, UsersModule и OfficeSuppliesModule.

. DeskModule импортирует UsersModule и OfficeSuppliesModule, так как два компонента показывают их компоненты в компоненте.этого модуля.

И проблема в том, что в OfficeSuppliesModule у вас есть компонент из DeskModule, чтобы показать, к какому столу он принадлежит.

Я не совсем понял, какпочему у вас есть компонент, чтобы показать это?Вместо компонента вы могли бы использовать сервис, который вы могли бы использовать в CoreModule.С помощью этой службы вы можете предоставить метод, чтобы сообщить шаблону компонента в OfficeSuppliesModule, к какому столу принадлежат эти канцелярские товары.Поскольку не было бы компонента, который необходимо использовать повторно, вы не столкнетесь с этой проблемой.

Еще одна вещь, которую вы можете сделать, это переместить компонент, который вы используете, в свой DeskModule и ваш OfficeSuppliesModule в SharedModule, а затем добавьте SharedModule в массив imports как DeskModule, так и OfficeSuppliesModule

UPDATE

начиная с Angular 6,вы можете добавить providedIn: 'root' в @Injectable декоратор вместо добавления имени службы в массив providers модуля.Таким образом, служба регистрируется в инжекторе root и доступна через приложение.

Таким образом, вы можете изменить все эти службы в нескольких модулях, добавив providedIn: 'root' к * 1036.* декоратор этих сервисов:

@Injectable({
  providedIn: 'root'
})

А затем, как предложено выше в этом обновлении, переместите компоненты, используемые в PlantModule и FleetsModule, в SharedModule.

...