如何设置角度路由

时间:2019-10-21 09:46:34

标签: javascript angular

Here是我的作品。

我设置了一个保护措施,将请求URI / admin转发到/ login, 您可以参考/admin/admin.guard.ts了解详情。

工作正常。但是,当请求URI为/ admin / abc时,它将不起作用。

以下是/admin/admin-routing.module.ts的内容:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AdminComponent } from './admin.component';
import { AdminGuard } from './admin.guard';
const routes: Routes = [
  {
    path: 'admin',
    canActivate: [AdminGuard],
    component: AdminComponent,
    children: [
      {
        path: '',
        redirectTo: 'admin',
        pathMatch: 'full'
      },
      {
        path: '**',
        redirectTo: 'admin',
        pathMatch: 'full'
      }
    ]
  }
];

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

如何解决此问题?

2 个答案:

答案 0 :(得分:1)

使用绝对路径进行重定向:

const routes: Routes = [
{
  path: 'admin',
  canActivate: [AdminGuard],
  component: AdminComponent,
  children: [
    {
      path: '',
      redirectTo: '/admin',
      pathMatch: 'full'
    },
    {
      path: '**',
      redirectTo: '/admin',
      pathMatch: 'full'
    }
  ]
}
];

如果使用相对路径,则将存在无限循环的重定向。 从/ admin / 123到/ admin / admin到/ admin / admin,依此类推。

答案 1 :(得分:0)

您可能要检查在imports的{​​{1}}下注册自定义角度模块的顺序。确保包含app.module.ts的路由条目的模块在其他模块之后排在最后。

例如,在您的情况下,请继续在app.module.ts的末尾添加{ path: '**', ... }

AdminRoutingModule

@NgModule({ declarations: [ ... ] imports: [ // Angular in-built modules // Your custom modules AdminRoutingModule ], providers: [ ... ], entryComponents: [ ... ], bootstrap: [ AppComponent ] }) 表示当在应用程序中注册的现有路由没有找到匹配项时,URL的最终选项将被拒绝。还可以考虑在redirectTo属性中使用绝对路径,例如**

所以我不确定这是否可以解决您的问题,但是值得尝试一下!