Dans une application angulaire, j'ai vu que cela @Component
avait des propriétés moduleId
. Qu'est-ce que ça veut dire?
Et quand elle module.id
n'est définie nulle part, l'application fonctionne toujours. Comment cela peut-il encore fonctionner?
@Component({
moduleId: module.id,
selector: 'ng-app',
templateUrl: 'app.component.html',
styleUrls: ['app.component.css'],
directives: [AppComponent]
});
angular
systemjs
angular2-components
Nishchit Dhanani
la source
la source
Réponses:
La version bêta d'Angular (depuis la vesion 2-alpha.51) prend en charge les actifs relatifs pour les composants, comme templateUrl et styleUrls dans le
@Component
décorateur.module.id
fonctionne lors de l'utilisation de CommonJS. Vous n'avez pas à vous soucier de son fonctionnement.Source du billet de Justin Schwartzenberger , merci à @Pradeep Jain
Mise à jour du 16 septembre 2016:
la source
Mise à jour pour (2017-03-13) :
Source: https://angular.io/docs/ts/latest/guide/change-log.html
Définition:
moduleId
paramètre à l'intérieur de l'@Component
annotation prend unestring
valeur qui est;" L'ID du module du module qui contient le composant. "
Utilisation CommonJS:
module.id
,Utilisation de SystemJS:
__moduleName
Raison d'utiliser
moduleId
:moduleId
est utilisé pour résoudre les chemins relatifs de vos feuilles de style et modèles comme indiqué dans la documentation.réf (ancienne): https://angular.io/docs/js/latest/api/core/index/ComponentMetadata-class.html
réf: https://angular.io/docs/ts/latest/cookbook/component-relative-paths.html
Exemple d'utilisation:
Structure des dossiers:
Sans module.id :
Avec module.id :
tsconfig.json:
la source
map
clés à l'intérieur de votre configuration. Commeapp
.templateUrl: 'app/components/my.component.html', styleUrls: ['app/components/my.component.css']
Si vous obtenez
typescript error
, justedeclare
la variable dans votre fichier.UPDATE - December 08, 2016
Le
module
mot-clé est disponible surnode
. Donc, si vous installez@types/node
, dans votre projet, vous aurezmodule
automatiquement des mots clés disponibles dans vos fichiers dactylographiés sans en avoir besoindeclare
.npm install -D @types/node
Selon votre configuration, vous devrez peut- être l'inclure dans votre
tsconfig.json
fichier pour obtenir l' outillage :Bonne chance
la source
ng build --prod --aot
travail en faisantnpm install -D @types/node
après avoir passé beaucoup de temps à tripoter :)moduleId: 'module.id'
(remarquez les guillemets simples autour de module.id)module.id
une chaîne. Si cela a fonctionné, quelque chose semble être incorrect. Vous devrez peut-être approfondir vos recherches.En plus des excellentes explications de
echonax
etNishchit Dhanani
je tiens à ajouter que je déteste vraiment la population de composants avecmodule.id
. Surtout, si vous avez un support pour la compilation AoT (Ahead-of-Time) et pour un projet réaliste c'est ce que vous devriez viser, il n'y a pas de place pour quelque chose commemodule.id
dans les métadonnées de votre composant.Depuis les documents :
Je pense qu'avoir cette ligne dans la version de production du
index.html
fichier n'est absolument pas acceptable!Par conséquent, l'objectif est d'avoir une compilation JiT (juste à temps) pour le développement et une prise en charge AoT pour la production avec la définition de métadonnées de composant suivante: (sans
moduleId: module.id
ligne)En même temps, je voudrais placer des styles, comme
my.component.css
et des fichiers de modèle, comme parmy.component.html
rapport au composantmy.component.ts
chemins de fichiers des .Pour y parvenir, la solution que j'utilise est d'héberger un serveur web (lite-server ou browser-sync) pendant la phase de développement à partir de plusieurs sources d'annuaire!
bs-config.json
:Veuillez prendre une réponse à cette réponse pour moi des détails.
Le projet de démarrage rapide angulaire 2 exemplaire, qui repose sur cette approche, est hébergé ici .
la source
Selon Angular doc, vous ne devez pas utiliser @Component ({moduleId: module.id})
Veuillez ref: https://angular.io/docs/ts/latest/guide/change-log.html
Voici le texte pertinent de cette page:
Toute mention de moduleId a été supprimée. Suppression du livre de recettes "Chemins relatifs des composants" (2017-03-13)
Nous avons ajouté un nouveau plugin SystemJS (
systemjs-angular-loader.js
) à notre configuration SystemJS recommandée. Ce plugin convertit dynamiquement les chemins "relatifs aux composants" dans templateUrl et styleUrls en "chemins absolus" pour vous.Nous vous encourageons fortement à n'écrire que des chemins relatifs aux composants. C'est la seule forme d'URL abordée dans ces documents. Vous n'avez plus besoin d'écrire
@Component({ moduleId: module.id })
, ni ne devriez-vous.la source
On dirait que si vous utilisez "module": "es6" dans tsconfig.json, vous n'avez pas besoin de l'utiliser :)
la source
Cette valeur moduleId est utilisée par les processus de réflexion angulaire et le composant metadata_resolver pour évaluer le chemin d'accès complet du composant avant la construction du composant.
la source
L'ajout
moduleId: module.id
corrige plusieurs problèmes pouvant survenir lors de la création d'applications natives angulaires et d'applications Web angulaires. Il est préférable de l'utiliser.Il permet également au composant de rechercher des fichiers dans le répertoire courant au lieu du dossier supérieur
la source