You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular路由问题:点击Experiment链接无法在outlet1显示内容

Angular路由问题:Experiment链接无法在outlet1显示内容

问题描述

点击test.component.html中的Home/About/Dashboard按钮时,outlet1能正常显示对应组件内容,但点击Experiment按钮时,内容无法显示。

错误原因

  1. 路由配置不匹配:experiment是懒加载模块的路由,但你尝试将它作为命名路由outlet1的子路径跳转,而主路由配置里experiment并未关联到outlet1。
  2. 懒加载模块路由冗余配置:my-routing.module.ts中给路由指定了outlet: "outlet1",懒加载模块的路由会继承父路由上下文,这个多余配置会导致路由匹配失败。

修复步骤

步骤1:修改主路由配置(app-routing.module.ts)

将experiment路由关联到outlet1,让它成为命名路由的一部分:

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './components/home/home.component';
import { AboutComponent } from './components/about/about.component';
import { DashboardComponent } from './components/dashboard/dashboard.component';
import { AuthGuard } from './auth.gard';
import { ListComponent } from './list.component';
import { TestComponent } from './test/test.component';

const myModule = () => import('./my-routing/my-module').then(x => x.MyRoutingModule);
const routes: Routes = [
  { path: '', component: TestComponent },
  // 修改experiment路由,指定关联outlet1
  {
    path: 'experiment',
    outlet: "outlet1",
    loadChildren: myModule
  },
  {
    path: 'home',
    component: HomeComponent, outlet: "outlet1"
  },
  {
    path: 'about', canActivate: [AuthGuard],
    component: AboutComponent, outlet: "outlet1",
  },
  {
    path: 'dashboard',
    component: DashboardComponent, outlet: "outlet1"
  }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

步骤2:修改懒加载模块路由(my-routing.module.ts)

移除冗余的outlet配置,让子路由继承父路由的命名outlet上下文:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { ListComponent } from '../list.component';
import { TestComponent } from '../test/test.component';

const routes: Routes = [
  // 去掉outlet配置
  { path: '', component: ListComponent },
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class MyRoutingModule { }

步骤3:保持test.component.html的跳转链接不变

你的Experiment链接写法正确,无需修改:

<div class="col-1">
  <a [routerLink]="[{ outlets:{ outlet1: ['experiment'] }}]"><button type="button" class="btn btn-primary">
      Experiment</button></a>
</div>

修改完成后,点击Experiment按钮时,Angular会正确匹配outlet1下的experiment懒加载路由,在命名路由出口中显示ListComponent的内容。

内容的提问来源于stack exchange,提问作者janci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 04:32:51