En una aplicación angular, he visto que @Componenttiene propiedades moduleId. Qué significa eso?
Y cuando module.idno 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
@Componentdecorador.module.idfunciona 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:
moduleIdEl parámetro dentro de la@Componentanotación toma unstringvalor que es;" La identificación del módulo que contiene el componente " .
El uso CommonJS:
module.id,Uso de SystemJS:
__moduleNameMotivo de uso
moduleId:moduleIdse 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
mapteclas dentro de tu configuración. Al igualapp.templateUrl: 'app/components/my.component.html', styleUrls: ['app/components/my.component.css']Si obtiene
typescript error, solodeclarela variable en su archivo.UPDATE - December 08, 2016La
modulepalabra clave está disponible ennode. Entonces, si instala@types/node, en su proyecto, tendrámodulepalabras clave disponibles automáticamente en sus archivos de mecanografía sin necesidad dedeclareello.npm install -D @types/nodeDependiendo de su configuración, es posible que deba incluir esto en su
tsconfig.jsonarchivo para obtener las herramientas :Buena suerte
fuente
ng build --prod --aottrabajarnpm install -D @types/nodedespués de pasar mucho tiempo tocando el violín :)moduleId: 'module.id'(observe las comillas simples alrededor de module.id)module.idcomo 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
echonaxyNishchit Dhananiquiero 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.iden los metadatos de sus componentes.De los documentos :
¡Creo que tener esta línea en la versión de producción del
index.htmlarchivo 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.idlínea)Al mismo tiempo, me gustaría colocar estilos, me gusta
my.component.cssy archivos de plantilla, comomy.component.htmlrelativos a lasmy.component.tsrutas 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.idsoluciona 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