54 votes

Comment ajouter un module de routage à un module existant dans angular CLI version 1.1.1 ?

J'ai créé un module en utilisant angular CLI et j'ai oublié d'ajouter --routing lors de sa création, maintenant je veux y ajouter un module de routage.

ng init --routing ne sera pas utile dans angular CLI version 1.1.1

6 votes

Eh bien, ajoutez le code par vous-même. Ou générez un autre module avec le routage, et copiez et collez le code généré.

0 votes

La nouvelle version d'angular cli ne prend pas en charge ng init

76voto

Meligy Points 10138

Ce n'est pas du tout un problème.

Il suffit d'ajouter le routage manuellement.

Tout ce que le --routing fait, en plus d'ajouter <router-outlet></router-outlet> sur app.component.html , est ajouté q RouterModule.forRoot() dans un module séparé appelé AppRoutingModule et d'inclure ce module dans le fichier imports de AppModule .

Ainsi, en app.module.ts il ajoute AppRoutingModule à la imports de votre AppModule .

En AppRoutingModule est défini comme suit app-routing.module.ts qui est créé à partir de ce modèle .

C'est très petit et je vais le copier ici :

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

const routes: Routes = [
  {
    path: '',
    children: []
  }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

En {path: '', children:[]} est juste un espace réservé que vous êtes censé remplacer (je le sais parce que je l'ai ajouté au code source). Il permet simplement de s'assurer que le routeur ne se plaint pas de l'utilisation de la directive <router-outlet> quand vous n'avez pas d'itinéraire.

Donc, revenons à la question, que devez-vous faire ? Soit vous copiez le fichier dans votre projet, pour qu'il ressemble au CLI original, et vous ajoutez AppRoutingModule à votre AppModule 's imports ...

Ou simplement ajouter RouterModule.forRoot([/* routes here */]) à votre AppModule 's imports à la place. Il fonctionnera toujours, avec un support intégré pour le chargement paresseux et tout le reste fonctionnera très bien.

P.S.

Rappelez-vous que pour ajouter des routes enfant, vous pouvez toujours générer plus de modules avec le routage ng generate module Foo --routing indépendamment du fait que vous ayez utilisé l'option --routing drapeau avec ng new ou pas. Aucune configuration ni aucune magie ne sont à prévoir.

0 votes

Existe-t-il un drapeau spécifique pour générer des routes enfant ? ou cela créera automatiquement des routes enfant lorsque j'utiliserai la fonction --routing lors de la création d'un nouveau module ?

0 votes

Angular-cli (à partir de la version 6 au moins) utilise toujours RouterModule.forChild() lors de la génération d'un nouveau module. Seulement lorsque vous utilisez --routing con ng new il utilise RouterModule.ForRoot() comme import dans le module de routage. Il n'y a pas de routes réelles définies par le client de toute façon.

1 votes

Pour pouvoir exécuter les tests avec le ng test avec succès, vous devez ajouter import { RouterTestingModule } from '@angular/router/testing'; y TestBed.configureTestingModule({ imports: [ RouterTestingModule ],... dans le app.component.spec.ts fichier.

35voto

Eric Eskildsen Points 138
  1. ng generate module app-routing --module app --flat

    • Remplacer app avec le nom de votre module existant
    • Remplacer app-routing avec le nom à donner au module de routage
  2. Dans le nouveau module, ajoutez appRoutes y RouterModule.forRoot ou RouterModule.forChild .

    import { NgModule } from '@angular/core';
    import { CommonModule } from '@angular/common';
    import { Routes, RouterModule } from '@angular/router';
    
    const appRoutes: Routes = [
        { path: 'some-path', component: SomeComponent }
    ];
    
    @NgModule({
        imports: [
            RouterModule.forRoot(appRoutes)
        ],
        exports: [
            RouterModule
        ]
    })
    export class AppRoutingModule {}
  3. Ajouter <router-outlet></router-outlet> à votre composant si nécessaire (par ex, app.component.html )

Source :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X