Reputation: 443
I want to have a loaded module configurable. In theory, I want a module that is its own bigger application do receive some configuration. To show / load certain elements depending on the config the main application sends down.
I used that with other modules but those where not lazyLoaded. I tried and searched around and have not seen the usage of something like:
children: [
{
path: 'application-module',
loadChildren: () => import('@application-module').then(m => m.ApplicationModule.forRoot({
foo:'bar'
}))
}
]
Is that even possible? If I use it I get the error
error: Error: No NgModule metadata found for '[object Object]'.
That is common when the module you load is not defined.
Or am I on the wrong track and there is a better solution for that? Thank you
Upvotes: 3
Views: 1832
Reputation: 2714
since angular 14 you can add providers to the path:
children: [
{
path: 'application-module',
loadChildren: () => import('@application-module').then(m => m.ApplicationModule),
providers: [{ provide: MyFooInjectionToken, useValue: 'bar' }]
}
]
Upvotes: 3
Reputation: 373
If the Module is in your code, just change the function return
@Module({})
export class ApplicationModule {
static forRoot(): typeof ApplicationModule {
return this;
}
}
Upvotes: 0
Reputation: 89
I suppose one thing you can try, because what you're doing now won't work. Reason being that loadChildren expects a class with the @module decorator.
What you are giving it is a static function.
What you could try is to do this:
children: [
{
path: 'application-module',
loadChildren: () => import('@application-module').then(m => { m.ApplicationModule.forRoot({foo: 'bar'}); return m.ApplicationModule; } )
}))
}
]
I have no idea if that will work though.
Another option is to go for a service or through routing in the receiving lazyloaded module route.
Upvotes: 4