I want to have multiple routing
modules in order to keep my application clean and easy to read. I currently use lazy loading for the SubComponent
but I don't want to do this. So I am looking for a way to change this. Anyways, here is the currently working code.
I have the following two routing files.
app-routing.module.ts
:
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{ path: '', component: HomeComponent },
{ path: 'sub', loadChildren: './sub/sub.module#SubModule' }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
sub-routing.module.ts
:
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{ path: '', component: SubComponent, children: [
{ path: 'new', component: SubEditComponent }
] },
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
It works fine this way but I don't want to apply lazy loading to this SubComponent
. So, ideally I want to change the app-routing.module.ts
to this:
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
{ path: '', component: HomeComponent },
{ path: 'sub', component: SubComponent }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
This will not work and result in the following error:
ERROR Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'sub/new'
Error: Cannot match any routes. URL Segment: 'sub/new'
The SubComponent
will grow substantially in size and I don't want to apply lazy loading for my own reasons. So in any event, is there a way to use multiple routing files while avoiding lazy loading?
define where we want to load our component in the template with the ng-template tag, define its view query through ViewChild decorator, which gives us access to the DOM and defines the container to which the component will be added, finally, dynamic import the component and add it to the container.
You can import this NgModule multiple times, once for each lazy-loaded bundle. However, only one Router service can be active.
Lazy loading modules helps us decrease the startup time. With lazy loading our application does not need to load everything at once, it only needs to load what the user expects to see when the app first loads. Modules that are lazily loaded will only be loaded when the user navigates to their routes.
Create a Module with Routingmodule. ts, which is one of the files needed to set up lazy loading for your feature module. Navigate to the project by issuing the cd client-app command. The --routing option used Angular/CLI version 8.1 or higher.
Have you tried loading it like this:
{ path: 'sub', loadChildren: () => SubModule }
You can find a lot more details here.
You forgot to declare child route to new
const routes: Routes = [
{ path: '', component: HomeComponent },
{
path: 'sub',
component: SubComponent,
children: [
{ path: 'new', component: SubEditComponent }
]
}
];
if you want to keep the second routing module then
sub-routing.module.ts
const routes: Routes = [
{ path: 'sub', component: SubComponent, children: [
{ path: 'new', component: SubEditComponent }
] },
];
sub.module.ts
@NgModule({
...
imports: [
...
SubRoutingModule,
app.module.ts
@NgModule({
imports: [
...,
AppRoutingModule,
SubModule
Plunker Example
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With