example - Núcleo angular/característica/módulos compartidos: qué va a dónde
ng-click function (1)
En primer lugar, no es un duplicado de ninguna otra pregunta y he leído la guía angular sobre eso. Sin embargo todavía tengo varias preguntas.
El módulo de funciones es el más sencillo: tiene una función, agrúpela en un módulo de características. Digamos que además de la característica obvia tengo las páginas que cada aplicación tiene:
- Página de inicio principal (no app.template.html, sino algo que representa primero en su enrutador-salida)
- Páginas de error, como 404
- Página de contactos, página de nosotros
Probablemente podría mover todo a un módulo de características llamado ''estático'', pero no me gusta el nombre y tampoco me gusta agrupar cosas no relacionadas en su totalidad en el mismo módulo, es decir, página de error y página de contacto. Entonces, ¿qué es un patrón para las páginas mencionadas?
Ahora, módulo compartido vs núcleo. Tengo los siguientes artículos:
- CsrfService (me suena a core one)
- Logger (servicio angular2-logger)
- HttpModule (core o compartido?)
- Logged-in-guard y AuthService (tengo NavbarComponent / NavbarModule y LoginComponent usando AuthService), ¿son una característica (login / auth) o son un núcleo / compartido?
Entonces, la pregunta principal es cómo elegir decidir por los elementos que enumeré y por nuevos elementos como esos.
Las respuestas a su pregunta son subjetivas, sin embargo, hay algunas recomendaciones de los documentos oficiales que puede seguir: ¿Qué tipo de módulos debo tener y cómo debo usarlos? . Si no ha leído los documentos en NgModule
y en las preguntas frecuentes, sugeriría dedicar unas horas a estudiarlos, las cosas serán mucho más claras (al menos, lo fueron para mí :)
Estoy usando la siguiente configuración y funciona bastante bien para mí :
- app / shared : este es el módulo donde guardo las cosas pequeñas que necesitarán todos los demás módulos. Tengo 3 submódulos allí
directives
,components
ypipes
, solo para mantener las cosas un poco mejor organizadas. Ejemplos:filesize.pipe
,click-outside.directive
,offline-status.component
... - aplicación / público : en este módulo mantengo las rutas públicas y los componentes de nivel superior. Ejemplos:
about.component
,contact.component
,app-toolbar.component
- app / core : los servicios que la aplicación necesita (y no pueden funcionar sin ella) van aquí. Ejemplos:
ui.service
,auth.service
,auth.guard
,data.service
,data.service
.... - Aplicación / protegido : similar al público , solo para usuarios autorizados. Este módulo tiene rutas protegidas y componentes de alto nivel. Ejemplos:
user-profile.component
,dashboard.component
,dashboard-sidebar.component
... - aplicación / características : este es el módulo donde se encuentran las funcionalidades de la aplicación. Están organizados en varios submódulos. Si la aplicación reproduce música, aquí es donde irían los submódulos de
player
,playlist
yfavorites
. Si nos fijamos en@angular/material2
esto sería un equivalente a suMaterialModule
y muchos submódulos, comoMdIconModule
,MdSidenavModule
, etc. - app / dev : utilizo este módulo al desarrollar, no lo envié en producción.
El consejo general sería:
- Organizar características por funcionalidad, no por páginas.
- mantener rutas similares en su propio módulo (bueno para la carga perezosa)
- Los servicios que la aplicación necesita para funcionar van al núcleo.
- Las cosas que importa más de una vez (o dos) probablemente sean buenas para compartir.
- Lee documentos en detalle, hay muchas cosas buenas allí.
Para responder a sus preguntas específicas: pondría todas esas rutas en un módulo: static
, public
, cualquiera que sea el nombre. CsrfService
- core, Logger
- core o dev, HttpModule
- core, solo necesita una instancia (probablemente), auth
- core. No pongas servicios en compartido.
Si no puede decidir cómo / qué agrupar en una función, cree una nueva aplicación, copie la carpeta de funciones específicas y debería funcionar allí también. Si no es así, tendrás que organizar mejor las cosas.