子路由不起作用,应用程序重定向到 404 页面
Children routing not working and application redirects to the 404 page
我已经创建了一个 angular 应用程序版本 7,项目结构是这样的。
app 模块有 app-routing.module.ts,dashboard 模块有 dashboard-routing module.ts。在仪表板模块中,布局组件路由有子组件,即 home 和 admin。
这是我的代码:
AppModule
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
期望的输出
路由器会按照你导入的顺序匹配你的路由,因此,如果你在你的appModule的开头添加一个通配符/**来匹配所有路由,它会在检查是否有任何之前匹配到这个路由你的其他路线匹配它。
扩展示例 - 路由器将 运行 通过所有已定义的路由,直到找到匹配项,如果您从 catch all 开始,它将停在那里,不再继续。因此,在模块(appRoutes)的开头定义一个 catch all 将是一个问题。
您的仪表板模块会导入您的仪表板路由,因此在应用程序模块中导入仪表板模块将决定何时导入您的仪表板路由。
您需要按照您认为匹配的顺序导入路由,并将通配符留到最后添加。这应该始终是带有通配符的后备。
routing 的文档中有一个关于此的精彩部分。
如果还有什么不清楚的地方,欢迎评论,我会相应更新我的回答。
亲切的问候克里斯
我已经创建了一个 angular 应用程序版本 7,项目结构是这样的。 app 模块有 app-routing.module.ts,dashboard 模块有 dashboard-routing module.ts。在仪表板模块中,布局组件路由有子组件,即 home 和 admin。
这是我的代码:
AppModule
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
期望的输出
路由器会按照你导入的顺序匹配你的路由,因此,如果你在你的appModule的开头添加一个通配符/**来匹配所有路由,它会在检查是否有任何之前匹配到这个路由你的其他路线匹配它。
扩展示例 - 路由器将 运行 通过所有已定义的路由,直到找到匹配项,如果您从 catch all 开始,它将停在那里,不再继续。因此,在模块(appRoutes)的开头定义一个 catch all 将是一个问题。
您的仪表板模块会导入您的仪表板路由,因此在应用程序模块中导入仪表板模块将决定何时导入您的仪表板路由。
您需要按照您认为匹配的顺序导入路由,并将通配符留到最后添加。这应该始终是带有通配符的后备。
routing 的文档中有一个关于此的精彩部分。
如果还有什么不清楚的地方,欢迎评论,我会相应更新我的回答。
亲切的问候克里斯