Angular 角度:如果未提供子参数id,则重定向到父参数
我有两个模块,每个模块都有自己的路由:Angular 角度:如果未提供子参数id,则重定向到父参数,angular,typescript,routes,lazy-loading,Angular,Typescript,Routes,Lazy Loading,我有两个模块,每个模块都有自己的路由: CarsModule PassengersModule (Lazy Loaded) 乘客是汽车的孩子,可通过url访问: https://localhost/cars/12/passengers/1 CarsModule和PassengerModule都定义了路由: const routesCars: Routes = [ { path: "cars/:id", canActivate: [
CarsModule
PassengersModule (Lazy Loaded)
乘客是汽车的孩子,可通过url访问:
https://localhost/cars/12/passengers/1
CarsModule和PassengerModule都定义了路由:
const routesCars: Routes = [
{
path: "cars/:id",
canActivate: [AuthGuard],
component: CarsContainerComponent,
children: [
{
path: "",
redirectTo: "dashboard",
pathMatch: "full",
},
{
path: "dashboard",
component: CarsDashboardPageComponent,
},
{
path: "passengers",
loadChildren: () =>
import("./passengers/passengers.module").then(
(m) => m.PassengersModule
),
},
],
},
];
const routesPassenger: Routes = [
{
path: "",
redirectTo: ?????
},
{
path: ":pid",
component: PassengerDashboardContainerComponent,
children: [
{
path: "",
component: PassengerDashboardContainerComponent,
},
],
},
];
如果有人导航到没有pid的乘客:
http://localhost/cars/12/passengers
我想将该url重定向到父车url:
http://localhost/cars/12
我尝试在加载到路径“”上的空组件中执行此操作,但它似乎很笨重。实现这一点的最佳方法是什么?您可以使用guard来决定是否可以激活路线 passengerout.service.ts
import { Injectable } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
@Injectable()
export class PassengerRouteGuard implements CanActivate {
constructor(private route: ActivatedRoute, public router: Router) { }
canActivate(): boolean {
this.route.params.subscribe(params => {
if (!params['pid']) {
this.router.navigate(['/cars/']);
return false;
}
return true;
});
}
}
乘客模块.route.ts
import { PassengerRouteGuard} from './PassengerRoute.service';
const routesPassenger: Routes = [
{
path: ":pid",
canActivate: [PassengerRouteGuard],
component: PassengerDashboardContainerComponent,
children: [
{
path: "",
component: PassengerDashboardContainerComponent,
},
],
},
];
谢谢。我尝试了这种方法,但似乎没有在参数中获得父id。我更改了构造函数以删除路由,并按照docs:constructor(public router:router){}canActivate(route:ActivatedRouteSnapshot):boolean中的建议将ActivatedRouteSmapshot传递到方法中{但是不管我怎么做,params数组都没有carId,所以我无法导航回父数组://不工作,params不包含ID:this.router.navigate([“/cars/”,route.params[“ID”]);