0

我有一个带有指向延迟加载模块的 routerLink 指令的按钮。但是链接不起作用。当它加载到浏览器地址栏中(单击按钮时)时,组件永远不会被加载,并且在控制台中我收到 404 错误。我究竟做错了什么。

我想要实现的功能是:当我去 /incidents/5 获取一个填写好的表格(来自 id = 5 的事件用于编辑/更新),而当我去 /incidents/new 获取一个空表格来插入一个新事件。

我想问题可能出在 IncidentsRou​​tingModule 但我无法工作。

我的主要应用程序路由模块如下:

const appRoutes: Routes = [
  { path: '', redirectTo:'home', pathMatch:'full'},
  { path: 'home', component: HomeComponent },
  { path: 'incidents', loadChildren : 'app/incidents/incidents.module#IncidentsModule' },
  { path: 'patients', loadChildren: 'app/patients/patients.module#PatientsModule' },
  { path: 'doctors', loadChildren: 'app/doctors/doctors.module#DoctorsModule' },
  { path: 'clinics', loadChildren: 'app/clinics/clinics.module#ClinicsModule' },
  { path: 'search', component: SearchComponent },
  { path: '**', component: PageNotFoundComponent }
];

@NgModule({
  imports: [
    RouterModule.forRoot(appRoutes, { preloadingStrategy: PreloadAllModules } )
  ],
  exports: [RouterModule]
})

export class AppRoutingModule {}

IncidentsModule 是:

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    IncidentsRoutingModule
  ],
  declarations: [
    IncidentsComponent,
    IncidentDetailsComponent,
    IncidentsListComponent
  ],
  providers:[IncidentsService]
})
export class IncidentsModule { }

IncidentsRou​​tingModule 是:

const incidentsModuleRoutes: Routes = [
  {
    path: '',
    component: IncidentsComponent,
    children: [
      {
        path: '', component: IncidentsListComponent,
        children: [
          {
            path:':id', component: IncidentDetailsComponent
          },

          {
            path: 'new', component: IncidentDetailsComponent
          }
        ]
      }
    ]
  }
];

@NgModule({
  imports: [
    CommonModule,
    RouterModule.forChild(incidentsModuleRoutes)
  ],
  exports: [RouterModule]
})
export class IncidentsRoutingModule { }

我的 IncidentsComponent 有一个带有 routerLink 指令的按钮,该指令不起作用。贝娄是我的 IncidentsComponent:

@Component({
  // selector: 'app-incidents',
  template: `
    <div class="container-fluid">
      <h3 style="margin:20px 20px 0px 20px;">Περιστατικά</h3>
      <button type="button" class="btn btn-outline-primary" style="margin: 20px" routerLink="/incidents/new">
        <i class="fa fa-plus-circle" style="margin-right: 10px"></i>
        Νέο Περιστατικό
      </button>
      <router-outlet></router-outlet>
    </div>
  `,
  styleUrls: ['./incidents.component.css']
})
export class IncidentsComponent {

  constructor() {
  }

}
4

2 回答 2

0

将其更改为

<button type="button" class="btn btn-outline-primary" style="margin: 20px" routerLink="new">
        <i class="fa fa-plus-circle" style="margin-right: 10px"></i>
        Νέο Περιστατικό
      </button>

您可以尝试添加useHash: true主路由模块的 forRoot 方法

于 2017-06-26T12:35:20.310 回答
0

这个问题正如我在 IncidentsRou​​tingModule 中所怀疑的那样。我将其更改为以下内容,并且按预期工作。

const incidentsModuleRoutes: Routes = [
  {
    path: '',
    component: IncidentsComponent,
    children: [
      {
        path: '', component: IncidentsListComponent,
      },
      {
        path:':id', component: IncidentDetailsComponent
      },
      {
        path: 'new', component: IncidentDetailsComponent
      }
    ]
  }
];

显然我所理解的(不知道这是否正确,还没有找到或在某处读过)是延迟加载模块中的子代指的是<router-outlet></router-outlet>声明。

在我的情况下,我只有一个 <router-outlet>IncidentsComponent。因此,所有路径都必须驻留在 IncidentsComponent 下的子对象中。在其他子组件下添加子对象我想只有当这些组件也有<router-outlet>声明时才有效?我对吗????

于 2017-06-26T14:30:01.543 回答