Угловые ядра/функции/общие модули: что происходит

Прежде всего, это не дубликат какого-либо другого вопроса, и я прочитал это угловое руководство. Однако у меня все еще есть несколько вопросов.

Функциональный модуль является самым простым - у вас есть функция - сгруппируйте его в функциональный модуль. Скажем, что помимо очевидной особенности у меня есть страницы, которые каждое приложение имеет:

  1. Main Landing (не app.template.html, а то, что он делает первым в своем маршрутизаторе)
  2. Страницы ошибок, например, 404
  3. Контакты страница, о нас страница

Возможно, я мог бы переместить все в функциональный модуль под названием "static", но мне не нравится имя, а также не нравится группировать в основном не связанные вещи в один и тот же модуль, то есть страницу с ошибкой и страницу контактов. Итак, что такое шаблон для упомянутых страниц?

Теперь общий модуль vs core. У меня есть следующие пункты:

  1. CsrfService (звучит как основной для меня)
  2. Регистратор (услуга углового2-регистратора)
  3. HttpModule (основной или общий?)
  4. Logged-in-guard и AuthService (у меня есть NavbarComponent/NavbarModule и LoginComponent с использованием AuthService), так это те функции (login/auth) или те, что ядро /общий?

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

Ответ 1

Ответы на ваш вопрос субъективны, однако есть некоторые рекомендации из официальных документов, которые вы можете выполнить: Какие типы модулей я должен иметь и как их использовать? , Если вы не читали документы по NgModule и часто задаваемым вопросам, я бы предложил потратить несколько часов на их изучение, все будет намного яснее (по крайней мере, они были для меня :)

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

  • app/shared - это модуль, в котором я храню мелкие вещи, которые понадобятся каждому другому модулю. У меня есть 3 подмодуля там directives, components и pipes, просто чтобы вещи были организованы немного лучше. Примеры: filesize.pipe, click-outside.directive, offline-status.component...
  • app/public - В этом модуле хранятся общедоступные маршруты и компоненты верхнего уровня. Примеры: about.component, contact.component, app-toolbar.component
  • app/core - Службы, которые требуется приложениям (и не могут работать без них). Примеры: ui.service, auth.service, auth.guard, data.service, workers.service....
  • app/protected - аналогично общедоступным, только для авторизованных пользователей. Этот модуль имеет защищенные маршруты и компоненты верхнего уровня. Примеры: user-profile.component, dashboard.component, dashboard-sidebar.component...
  • app/features - Это модуль, где функциональность приложения. Они организованы в нескольких подмодулях. Если вы играете в приложение, это значит, что player, playlist, favorites подмодули. Если вы посмотрите на @angular/material2 это будет эквивалентно их MaterialModule и многим подмодулям, таким как MdIconModule, MdSidenavModule и т.д.
  • app/dev - я использую этот модуль при разработке, не отправляю его на производство.

Общий совет:

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

Чтобы ответить на ваши конкретные вопросы: я бы поместил все эти маршруты в один модуль - static, public, независимо от имени. CsrfService - core, Logger - core или dev, HttpModule - core, вам нужен только один экземпляр (возможно), auth - core. Не размещайте сервисы совместно.

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