2017-08-22 2 views
0

Je cherche un moyen de charger plusieurs modules sous le même path en Angular. Par exemple, considérons que j'ai trois modules AModule, BModule et CModule chacun ayant son propre appel RouterModule.forChild. Maintenant, je veux monter tous ces modules sous site route.Chargement de plusieurs modules sous la même route parente en Angular

Une façon que je l'ai réalisé cette chose est en enveloppant les routes dans RouterModule.forChild appel sous site itinéraire comme suit:

RouterModule.forChild([ 
    { 
    path: 'site', 
    children: [{}] // children goes here 
    } 
]) 

Je ne sais pas si cette approche est correcte mais il fonctionne très bien. Le seul problème que cette approche est que je dois spécifier canActivate dans chaque module que je veux monter sous site. Bien que ce ne soit pas un problème, je cherchais une solution plus propre.

Je sais qu'il existe une propriété loadChildren qui pourrait être utilisée pour charger des modules paresseusement. Mais je veux charger les modules avec impatience. J'utilise AngularCLI qui scinde le code du module que je spécifie en loadChildren dans un fichier JavaScript séparé que je ne veux pas. J'utilise AngularClI v1.2.0 et Angular v4.2.5.

Toute aide est fortement appréciée.

Merci

+1

Je ne suis pas sûr, mais vous pouvez exporter le composant AModule & BModule, utiliser les deux composants dans CModule puis vous pouvez utiliser le chargement Lazy pour charger CModule –

+1

pourquoi vous définissez des routes dans 'AModule', 'BModule' au lieu de simplement définir' routes' sans modules? les modules n'ont aucune valeur en termes de routage. ils seront fusionnés lors de la compilation. lire [Éviter les confusions courantes avec des modules en Angulaire] (https://blog.angularindepth.com/avoiding-common-confusions-with-modules-in-angular-ada070e6891f) –

+1

Salut @MaximKoretskyi, merci de commenter. C'est toujours génial d'obtenir la réponse de votre écrivain préféré :-). Permettez-moi de lire l'article que vous avez mentionné et je suis certain que j'obtiendrai mes réponses après avoir lu cela. En cas de confusion/question supplémentaire, je commenterai ici ou directement sur l'article. Merci. –

Répondre

1

Je ne suis pas tout à fait clair sur votre objectif et ce que vous essayez d'atteindre en fin de compte, mais voici quelques réflexions.

Vous pouvez utiliser le loadChildren et "chargement paresseux" pour charger sur demande OU avec empressement. Si vous sélectionnez des routes très chargées, dès que votre route principale est chargée et que votre première vue est affichée, les autres modules marqués pour un chargement rapide sont immédiatement chargés de manière asynchrone. J'ai un exemple de ceci ici: https://github.com/DeborahK/Angular-Routing dans le dossier APM-Final.

Je ne comprends pas pourquoi vous ne voulez pas de division de module. Il peut considérablement améliorer les performances de démarrage (temps d'affichage de la première page) de votre application.

En plus de canActivate il y a aussi un canActivateChild donc vous pouvez mettre ceci sur le parent et ne pas avoir à le répéter pour chaque route. Les documents pour cela sont ici: https://angular.io/api/router/CanActivateChild

+0

Merci d'avoir commenté.Donc, selon votre réponse et ma compréhension des routes, la valeur par défaut 'loadStrategy' pour' loadChildren' est 'PreloadAllModules' qui récupérera les routes définies sous' loadChildren' dès que l'itinéraire principal sera chargé comme indiqué. Ai-je raison? –

+0

Fondamentalement, j'essaie d'apprendre si je peux monter plusieurs modules sous le même chemin, c'est-à-dire 'site' à un seul endroit sans que le code soit divisé en fichiers JavaScript séparés. Est-ce que la technique que j'utilise pour charger les routes enfant sous 'site' dans' RouterModule.forChild' est correcte? –

+0

Je ne comprends pas très bien le terme "mount" dans ce contexte. Si vous voulez utiliser les fonctionnalités du chargement paresseux (désireux ou à la demande), alors ils * doivent * être dans des paquets séparés. Si vous n'avez pas de bundles séparés, votre application entière est téléchargée lorsque l'utilisateur demande votre application. – DeborahK