我通过@NgModule
设置了路由配置。我有一项服务,根据特定条件确定应该为用户显示应用程序的哪些部分。我需要调用该服务并根据返回的值设置路由。
问题:路线配置是在注释中设置的,我无法在此类设置中获得如何调用服务。
这里更具体的是我想要增强的示例配置。
我当前的路由设置:
const appRoutes: Routes = [
{
path: '',
redirectTo: 'first-route',
pathMatch: 'full'
},
{
path: 'first-route',
component: FirstComponent,
pathMatch: 'full'
},
{
path: 'second-route',
component: SecondComponent,
pathMatch: 'full'
},
...
];
@NgModule({
imports: [RouterModule.forChild(appRoutes)],
exports: [RouterModule]
})
export class MyRoutingModule {
}
应该更改路线设置的服务:
@Injectable()
export class MyService {
getAccessibleRoutes(): Observable<string[]> {...}
}
问题:如何拨打服务电话并更改路线?
注意:我也查看了"Dynamically adding routes in Angular"和"How we can add new routes dynamically into RouterModule(@NgModule imports)",但我还没有找到明确答案。
答案 0 :(得分:4)
如果我正确理解了你的问题,我想你可能会考虑使用路线保护来达到你的目标。我建议你使用警卫功能来指定访问路线的条件,而不是改变路线列表。
请查看此链接以获取有关路线保护的更多信息:
https://codecraft.tv/courses/angular/routing/router-guards/
我希望这会对你有所帮助。
import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { YourSecurityService } from './your-security.service';
@Injectable()
export class YourRouteGuardService implements CanActivate {
constructor(
private router: Router,
private yourSecurityService: YourSecurityService) {
}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean {
console.log(state.url); // HERE YOU CAN GET REQUESTED ROUTE
if (this.yourSecurityService.checkIfUserHaveAccess())
return true;
this.router.navigate(['your-route-to-redirect']);
return false;
}
}
接下来,您应该将护卫应用到您的路线上:
const appRoutes: Routes = [
{
path: 'someroute',
component: RouteComponent,
canActivate: [YourRouteGuardService]
},
...
]