typescript - Hur man lägger till ytterligare rutter dynamiskt i Angular
Jag använder Angular 5.2.2 (TypeScript) med Angular-CLI och .NET Core 2.0.
Jag försöker lägga till ytterligare rutter dynamiskt till min applikation.
Idén är att jag ska få mina rutter dynamiskt från en server som kontrollerar vilka moduler som ska vara tillgängliga för användaren. Men jag verkar inte kunna få rutterna att bli tillgängliga.
Jag har försökt att lägga till dem med RouterModule.forRoot men det fungerade inte.
Jag har försökt använda Router.resetConfig men jag verkar inte få det att fungera. Jag försöker använda beroendeinjektion för att få det i funktionen jag har skapat, men jag slutar med ett cykliskt beroende:
Uncaught Error: Provider parse errors:
Cannot instantiate cyclic dependency! ApplicationRef ("[ERROR ->]"): in NgModule AppModule in ./AppModule@-1:-1
Här är en bit av koden jag har:
app-routing.module.ts
import { NgModule, APP_INITIALIZER } from '@angular/core';
import { Routes, RouterModule, Router } from '@angular/router';
var routes: Routes = [{ path: '', loadChildren: "../app/modules/f2p-dashboard/f2p-dashboard.module#F2PDashboardModule" }];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
providers: [
{
provide: APP_INITIALIZER,
useFactory: AppConfigServiceFactory,
deps: [F2PModuleService, Router ],
multi: true
}
]
})
export function AppConfigServiceFactory(moduleService: F2PModuleService,
router:Router) {
return () => {
return moduleService.Init().subscribe((result) => {
let additionalRoutes = moduleService.GetRoutes()
routes = routes.concat(additionalRoutes);
console.log(routes);
//routes is filled
router.resetConfig(routes);
//RouterModule.forRoot(routes);
});
redigera: Alla rutter jag försöker lägga till använder loadChildren
Svar #1
Ett av sätten att göra detta är genom att trycka in rutten i routern och använda resetConfig.
Example :
constructor(private router: Router, private route: ActivatedRoute) {}
const config = this.router.config;
config.push({
path: 'dynamicRoutePath',
component: DynamicRouteComponent,
});
this.router.resetConfig(config);
this.router.navigate(['dynamicRoutePath'], {relativeTo: this.route});
Detta borde fungera.
