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”]);