En una aplicación angular, he visto que @Component
tiene propiedades moduleId
. Qué significa eso?
Y cuando module.id
no se define en ningún lado, la aplicación aún funciona. ¿Cómo puede seguir funcionando?
@Component({
moduleId: module.id,
selector: 'ng-app',
templateUrl: 'app.component.html',
styleUrls: ['app.component.css'],
directives: [AppComponent]
});
angular
systemjs
angular2-components
Nishchit Dhanani
fuente
fuente
Respuestas:
La versión beta de Angular (desde vesion 2-alpha.51) admite activos relativos para componentes, como templateUrl y styleUrls en el
@Component
decorador.module.id
funciona cuando se usa CommonJS. No necesita preocuparse por cómo funciona.Fuente de la publicación de Justin Schwartzenberger , gracias a @Pradeep Jain
Actualización el 16 de septiembre de 2016:
fuente
Actualización para (2017-03-13) :
Fuente: https://angular.io/docs/ts/latest/guide/change-log.html
Definición:
moduleId
El parámetro dentro de la@Component
anotación toma unstring
valor que es;" La identificación del módulo que contiene el componente " .
El uso CommonJS:
module.id
,Uso de SystemJS:
__moduleName
Motivo de uso
moduleId
:moduleId
se utiliza para resolver rutas relativas para sus hojas de estilo y plantillas como se dice en la documentación.ref (antiguo): https://angular.io/docs/js/latest/api/core/index/ComponentMetadata-class.html
ref: https://angular.io/docs/ts/latest/cookbook/component-relative-paths.html
Ejemplo de uso:
Estructura de carpetas:
Sin module.id :
Con module.id :
tsconfig.json:
fuente
map
teclas dentro de tu configuración. Al igualapp
.templateUrl: 'app/components/my.component.html', styleUrls: ['app/components/my.component.css']
Si obtiene
typescript error
, solodeclare
la variable en su archivo.UPDATE - December 08, 2016
La
module
palabra clave está disponible ennode
. Entonces, si instala@types/node
, en su proyecto, tendrámodule
palabras clave disponibles automáticamente en sus archivos de mecanografía sin necesidad dedeclare
ello.npm install -D @types/node
Dependiendo de su configuración, es posible que deba incluir esto en su
tsconfig.json
archivo para obtener las herramientas :Buena suerte
fuente
ng build --prod --aot
trabajarnpm install -D @types/node
después de pasar mucho tiempo tocando el violín :)moduleId: 'module.id'
(observe las comillas simples alrededor de module.id)module.id
como una cadena. Si funcionó, algo parece ser incorrecto. Es posible que deba investigar esto más a fondo.Además de las excelentes explicaciones de
echonax
yNishchit Dhanani
quiero agregar, que realmente odio la población de componentesmodule.id
. Especialmente, si tiene soporte para la compilación de AoT (antes de tiempo) y para un proyecto realista, esto es a lo que debe apuntar, no hay lugar para algo comomodule.id
en los metadatos de sus componentes.De los documentos :
¡Creo que tener esta línea en la versión de producción del
index.html
archivo no es absolutamente aceptable!Por lo tanto, el objetivo es tener una compilación JiT (Just-in-Time) para el desarrollo y soporte AoT para la producción con la siguiente definición de metadatos de componentes: (sin
moduleId: module.id
línea)Al mismo tiempo, me gustaría colocar estilos, me gusta
my.component.css
y archivos de plantilla, comomy.component.html
relativos a lasmy.component.ts
rutas de los archivos componentes .Para lograr todo esto, la solución que estoy usando es alojar un servidor web (servidor lite o sincronización de navegador) durante la fase de desarrollo desde múltiples fuentes de directorio.
bs-config.json
:Echa un vistazo a esta respuesta para obtener más detalles.
El ejemplar proyecto de inicio rápido angular 2, que se basa en este enfoque, está alojado aquí .
fuente
Según el documento angular, no debe usar @Component ({moduleId: module.id})
Ref: https://angular.io/docs/ts/latest/guide/change-log.html
Aquí está el texto relevante de esa página:
Toda mención de moduleId eliminada. Libro de cocina "Rutas relativas de componentes" eliminado (13/03/2017)
Agregamos un nuevo complemento SystemJS (
systemjs-angular-loader.js
) a nuestra configuración recomendada de SystemJS. Este complemento convierte dinámicamente rutas "relativas a componentes" en templateUrl y styleUrls en "rutas absolutas" para usted.Le recomendamos encarecidamente que solo escriba rutas relativas a componentes. Esa es la única forma de URL discutida en estos documentos. Ya no necesitas escribir
@Component({ moduleId: module.id })
, ni deberías hacerlo.fuente
Parece que si usa "module": "es6" en tsconfig.json, no tiene que usar esto :)
fuente
Este valor de moduleId es utilizado por los procesos de reflexión angular y el componente metadata_resolver para evaluar la ruta del componente completamente calificado antes de que se construya el componente.
fuente
Agregar
moduleId: module.id
soluciona varios problemas que pueden ocurrir al crear aplicaciones angulares nativas y aplicaciones web angulares. Es una buena práctica usarlo.También permite que el componente busque archivos en el directorio actual en lugar de hacerlo desde la carpeta superior
fuente