angular - 子路由不起作用,应用程序重定向到 404 页面

标签 angular routes angular-routing nested-routes

我创建了一个 Angular 应用程序版本 7,项目结构如下所示。 app 模块有 app-routing.module.ts,dashboard 模块有 dashboard-routing module.ts。在仪表板模块中,布局组件路由有子组件,即 home 和 admin。

这是我的代码:

应用模块

import { AppRoutingModule } from './app-routing.module';
import { DashboardModule } from './dashboard/dashboard.module';

import { AppComponent } from './app.component';
import { LoginComponent } from './login/login.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';


@NgModule({
  declarations: [
    AppComponent,
    LoginComponent,
    PageNotFoundComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    DashboardModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

应用路由模块:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { LoginComponent } from './login/login.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';

const routes: Routes = [
  { path: 'login', component: LoginComponent },
  { path: '', redirectTo: 'dashboard', pathMatch: 'full' },
  { path: '**', component: PageNotFoundComponent }
];

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

仪表板模块文件:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { LayoutComponent } from './layout/layout.component';
import { HomeComponent } from './home/home.component';
import { AdminComponent } from './admin/admin.component';
import { DashboardRoutingModule } from './dashboard-routing.module';

@NgModule({
  declarations: [LayoutComponent, HomeComponent, AdminComponent],
  imports: [
    CommonModule,
    DashboardRoutingModule
  ]
})
export class DashboardModule { }

仪表板路由模块。

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Routes, RouterModule } from '@angular/router';

import { LayoutComponent } from './layout/layout.component';
import { HomeComponent } from './home/home.component';
import { AdminComponent } from './admin/admin.component';


const dashboardRoutes: Routes = [
  {
    path: 'dashboard',
    component: LayoutComponent,
    children: [
      { path: '', redirectTo: 'home', pathMatch: 'full' },
      { path: 'home', component: HomeComponent },
      { path: 'admin', component: AdminComponent}
    ]
  }
];

@NgModule({
  declarations: [],
  imports: [
    CommonModule,
    RouterModule.forChild(dashboardRoutes)
  ],
  exports: [RouterModule]
})
export class DashboardRoutingModule { }

问题是我想路由到 localhost:4200 上的仪表板布局,但它总是在每条路由上转到 pageNotFound 组件路由。谁能指出问题所在。

StackBlitz 上的代码:

https://stackblitz.com/github/Ahsan9981/authGuardApp

期望的输出 enter image description here

最佳答案

路由器会按照你导入的顺序匹配你的路由,因此,如果你在你的appModule的开头添加一个通配符/**来匹配所有路由,它会在检查你的其他路由之前匹配到这个路由路线匹配。

扩展示例 - 路由器将遍历所有已定义的路由,直到找到匹配项,如果您从全部捕获开始,它将停在那里,不再继续。因此,在模块(appRoutes)的开头定义一个 catch all 将是一个问题。

您的仪表板模块导入您的仪表板路由,因此在应用程序模块中导入仪表板模块将决定何时导入您的仪表板路由。

您需要按照您认为匹配的顺序导入您的路由,并将通配符留到最后添加。这应该始终是使用通配符的后备。

routing 的文档中有一个关于此的精彩部分。 .

如果还有什么不清楚的地方,请随时发表评论,我会相应地更新我的答案。

亲切的问候克里斯

关于angular - 子路由不起作用,应用程序重定向到 404 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53702674/

相关文章:

angular - 选择 ngmodel 不绑定(bind)变量

android - createRoute 方法是否支持 Mapquest 中的纬度/经度?

haskell - 使用 Lucid WebUI 导航 Haskell Servant API

angular - 升级到 Angular 11 后的延迟加载路由问题

javascript - 如何将查询参数添加到防护中的路由并将其传递给Angular 4中的组件?

javascript - 在 Angular 中导入和使用外部 JS 库

jquery - Angular 2 - 根据包含图像的子 div 的高度调整父 div 的高度

linux - Linux 中两种不同的网关以及被动网关的 ping

Angular 4 - 对应用程序组件使用解析器

javascript - Angular 9 报告打印