【问题标题】:url of route goes back to default route with Angular路由的 url 使用 Angular 回到默认路由
【发布时间】:2020-10-20 11:18:30
【问题描述】:

我有 Angular 9 应用程序。

我有一些路线。我有一个这样的父溃败:http://localhost:4200/desktop

现在我有了要访问的组件:http://localhost:4200/desktop/testDesktop

但如果我想在浏览器中访问它会返回:http://localhost:4200/desktop

这就是我所拥有的:

app.component.html

 <app-nav-bar></app-nav-bar>
<router-outlet></router-outlet>

app.routing.module.ts:


const routes: Routes = [
  {
    path: 'mobile', loadChildren: () =>
      import('../app/mobile-dashboard/mobile-dashboard.module').then(m => m.MobileDashboardModule)
  },
  {
    path: 'desktop', loadChildren: () =>
      import('./desktop-dashboard/desktop-dashboard.module').then(m => m.DesktopDashboardModule),

  },
  {
    path: 'autologin',
    component: AutoLoginComponent
  }
];

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

desktop.routing.module.ts:

const routes: Routes = [
  { path: '', component: DesktopDashboardComponent },
  { path: 'desktop/testDesktop', component: TestDesktopComponent }
];

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

和 desktop.dashboard.module.ts:

@NgModule({
  declarations: [DesktopDashboardComponent, BarChartComponent, TestDesktopComponent],
  imports: [
    CommonModule,
    SharedModule,
    DragDropModule,
    MatCardModule,
    MatGridListModule,
    DesktopRoutingModule
  ],
  exports: [TestDesktopComponent]
})

和 desktop.dashboard.html 我添加了这个:

<router-outlet></router-outlet>

但它不会去:

http://localhost:4200/desktop/testDesktop

那么我要改变什么?

谢谢

app.modulet.ts 看起来像这样:

export function configureAuth(oidcConfigService: OidcConfigService) {
  return () =>
    oidcConfigService.withConfig({
      stsServer: 'http://localhost:4430',
      redirectUrl: window.location.origin,
      clientId: 'crowd-dashboard',
      scope: 'openid profile dashboard-api ',
      responseType: 'code',
      postLogoutRedirectUri: window.location.origin,
      unauthorizedRoute: '/unauthorized'
    });
}

@NgModule({
  declarations: [AppComponent, NavBarComponent],
  imports: [
    AppRoutingModule,
    BrowserModule,
    BrowserAnimationsModule,
    FormsModule,
    HttpClientModule,
    DragDropModule,
    MatCardModule,
    MatGridListModule,
    MatProgressSpinnerModule,
    MatCheckboxModule,
    MatIconModule,
    DesktopDashboardModule,
    MobileDashboardModule,
    AuthModule.forRoot(),
    BsDropdownModule.forRoot()
  ],
  providers: [
    OidcConfigService,
    {
      provide: APP_INITIALIZER,
      useFactory: configureAuth,
      deps: [OidcConfigService],
      multi: true
    },
    { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

【问题讨论】:

  • 尝试用 { path: 'testDesktop', component: TestDesktopComponent } 替换 { path: 'desktop/testDesktop', component: TestDesktopComponent } 并检查它是否能解决您的问题。
  • 感谢您的反应。是的,我也试过了:{ path: 'testDesktop', component: TestDesktopComponent } 但仍然回到localhost:4200/desktop
  • 同时检查您的控制台。您的testDesktop 可能有问题。这就是它返回父组件的原因。
  • 我刚刚根据您的场景创建了一个简单的示例,它对我来说工作正常。签出这个example
  • 但是如何测试呢?如果我这样做:angular-ivy-gnf4vw.stackblitz.io/testDesktop 没有任何反应

标签: angular typescript routes angular2-routing


【解决方案1】:

您的子路由必须是相对路由。 家长已经表示要去/desktop

您的子路线应该是:

const routes: Routes = [
  { path: '', pathMatch: 'full', component: DesktopDashboardComponent },
  { path: 'testDesktop', component: TestDesktopComponent }
];

请注意,我还为您的空路径添加了pathMatch: 'full',否则其他路由将被忽略。

Working StackBlitz

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-02-14
  • 2020-01-15
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
相关资源
最近更新 更多