Dans le code suivant, outre le fait que dans le premier exemple, nous devons importer productsModule
dans le fichier, quelle est la différence entre ces deux façons de charger une route paresseusement?
{ path: 'products', loadchildren: 'app/products/products.module#ProductsModule' }
contre
{ path: 'products', loadchildren: () => productsModule }
3 Réponses :
{chemin: 'produits', loadchildren: 'app / products / products.module # ProductsModule'}
C'est une méthode obsolète pour les modules chargés paresseusement pour Angular 8.
Les configurations de route loadChildren doivent être modifiées à partir d'une chaîne telle que
{chemin: 'produits', loadchildren: () => productsModule}
https://angular.io/guide/deprecations#loadchildren-string-syntax < / a>
Attention: le LazyLoading à l'aide de la fonction n'est pas pris en charge par la compilation AOT.
Cela nécessite juste une syntaxe différente: {path: 'products', loadchildren: () => import ('app / products / products.module'). Then (m => m.productsModule)} voir plus de détails ici: < a href = "https://github.com/angular/angular/issues/29959" rel = "nofollow noreferrer"> github.com/angular/angular/issues/29959
loadChildren: string
était obsolète dans Angular 8.0 .0 (28/05/2019).
ES2017 dynamic
import ()
est désormais pris en charge par Angular CLI et chaîne d'outils plus grande. Cela rend l'APIloadChildren: string
en grande partie redondant, carimport ()
est beaucoup plus naturel, est moins sujet aux erreurs et est conforme aux normes.
À part cela, le résultat final en utilisant les deux méthodes est le même (les routes sont chargées paresseusement, avec un avertissement si la version obsolète est utilisée).
Cependant, pour conserver tout projet à jour, pensez à utiliser
{ path: 'products', loadchildren: () => productsModule }
La version obsolète peut être supprimé dans la version 11 .
Voir
Corrigez-moi si je me trompe, mais je pense que le premier cas:
{ path: 'products', loadChildren: () => import('./products/products.module').then(m => m.productsModule) }
ne chargera pas le module paresseusement, car productsModule
doit être importé au en haut de votre fichier .ts
(aucun package .js
n'est téléchargé lors de l'accès à l'itinéraire). Vous devez utiliser l'instruction import ()
pour le rendre paresseux, exemple:
{ path: 'products', loadchildren: () => productsModule }
https://angular.io/guide/lazy-loading-ngmodules
https://alligator.io/angular/lazy-loading/
* cela devrait être ProductsModule
au lieu de productsModule
, selon la chaîne 'app/products/products.module#ProductsModule'
.