Можно ли использовать угловой компонент в нескольких проектах?

Я новичок в Angular и только начал учиться. У меня есть ситуация, когда мне нравится использовать один и тот же компонент в нескольких проектах.

Допустим, у меня есть CustomerComponent, и он выполняет операции CRUD.

Теперь я хочу использовать CustomerComponent в проекте A и проекте B. Причина в том, что если мне нужно изменить CustomerComponent, я могу изменить только в одном месте, а не в нескольких проектах.

Можно ли создать такой компонент?

Если это возможно, пожалуйста, направьте меня, как я могу выполнить это.

Заранее спасибо.


person Alomoni    schedule 09.03.2018    source источник
comment
Находятся ли проекты в одной конфигурации angular-cli? Я имею в виду, вы обслуживаете несколько приложений в рамках одного проекта?   -  person Bunyamin Coskuner    schedule 10.03.2018
comment
У меня такой же вопрос, как у Буньямина. Я хотел бы сохранить основной модуль в общей папке и импортировать модуль в текущий проект. Это своего рода способ импорта основных угловых модулей. Например, import {CommonModule} из '@angular/common';   -  person Alomoni    schedule 10.03.2018
comment
Да, вы можете сделать это, есть несколько способов. Расскажите немного о своих проектах. Ваши приложения находятся в одной папке или в разных местах?   -  person Bunyamin Coskuner    schedule 10.03.2018
comment
Взгляните на это: stackoverflow.com/ вопросы/45575372/   -  person Bunyamin Coskuner    schedule 10.03.2018
comment
Приложения будут в другой папке. Давайте рассмотрим этот путь. Вы создаете два разных приложения, таких как приложения «Управление заказами» (OM) и «Расчеты с клиентами» (AR). Оба приложения независимы друг от друга. Вы не можете разрешить одному и тому же человеку иметь доступ к обоим приложениям. Но вы должны разрешить пользователю выполнять операции CRUD в обоих приложениях. Итак, я хочу использовать тот же клиентский компонент, в котором есть функции CRUD. Если что-то изменилось для компонента Customer, вы бы изменили только в одном месте и отразили бы изменения в обоих приложениях. Спасибо   -  person Alomoni    schedule 10.03.2018


Ответы (2)


Да. Это определенно возможно. Вы должны сделать это, создав отдельный модуль, в котором будет зарегистрирован этот компонент. Затем вы можете экспортировать этот компонент из этого модуля и импортировать модуль в модули приложений проектов, в которых вы хотите использовать этот компонент.

Скажем, например, у вас есть основной модуль, что-то вроде этого:

@NgModule({
  declarations: [CustomerComponent],
  exports: [CustomerComponent],
})
export class CoreModule{}

Здесь мы объявили компонент с именем CustomerComponent и также экспортировали его из этого CoreModule.

Итак, теперь, если у вас есть два разных проекта с AppModule в качестве их корневых модулей, в обоих этих проектах вам придется импортировать этот файл CoreModule. Что-то вроде этого:

@NgModule({
  imports: [CoreModule],
})
export class AppModule{}

И как только это будет сделано, CoreModule будет зарегистрирован как модуль, экспортированные функции которого затем можно будет использовать внутри вашего AppModule.

person SiddAjmera    schedule 09.03.2018

Определенно, на самом деле рекомендуется делиться компонентами через модули:

Подробнее здесь: https://angular.io/guide/sharing-ngmodules

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

Изменить (12, 18 декабря) Вот ссылка, говорящая об одноэлементных сервисах: https://angular.io/guide/singleton-services

Вариант использования имеет значение, однако для ясности вы можете прочитать выше. Спасибо!

person Nico    schedule 09.03.2018
comment
Можете ли вы также указать ссылку на совместное использование одноэлементных сервисов? я думаю, может быть полезно для встряхивания полноты - person netalex; 11.12.2018
comment
также обратите на это внимание и рассмотрите возможность использования пользовательских библиотек, если вы собираетесь совместно использовать модули между несколькими приложениями: github.com/angular/angular-cli/issues/11168 - person netalex; 11.12.2018
comment
@netalex Добавлено. - person Nico; 12.12.2018