【问题标题】:Angular Routing : routes always redirect to 404 page角度路由:路由总是重定向到 404 页面
【发布时间】:2020-09-02 10:18:52
【问题描述】:

我试图在我的 Web 应用程序上创建一个 404 页面,因此我创建了组件并将路由添加到 app-roging.module.ts 但即使我输入“/home”,该网站也总是重定向到 404 页面" 在网址中。

未找到的组件在公共模块中,附加到未找到的模块:

import { NgModule } from '@angular/core';
import { SharedModule } from 'src/app/shared/shared.module';
import { NotFoundComponent } from './not-found/not-found.component';

@NgModule({
  declarations: [NotFoundComponent],
  imports: [
    SharedModule
  ]
})
export class NotFoundModule { }

public.module.ts:

import { NgModule } from '@angular/core';
import { PublicRoutingModule } from './public-routing.module';
import { SharedModule } from '../shared/shared.module';
import { MainPageComponent } from './main-page/main-page.component';
import { CookieInformationComponent } from './cookie-information/cookie-information.component';
import { LegaleInformationComponent } from './legale-information/legale-information.component';
import { MapComponent } from './map/map.component';
import { AgmCoreModule } from '@agm/core';
import { InnerHTMLComponent } from './inner-html/inner-html.component';
import { NotFoundModule } from './not-found/not-found.module';

@NgModule({
  declarations: [MainPageComponent, CookieInformationComponent, LegaleInformationComponent, MapComponent, InnerHTMLComponent],
  imports: [
    SharedModule,
    PublicRoutingModule,
    AgmCoreModule,
    NotFoundModule
  ]
})
export class PublicModule { }

我有 3 个路由文件:app-routing、private-routing 和 public-routing:

app-routing.module.ts :

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { NotFoundComponent } from './public/not-found/not-found/not-found.component';

const APP_ROUTES: Routes = [
  { path: '', redirectTo: '/home', pathMatch: 'full' },
  { path: '**', component: NotFoundComponent }
];

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

public-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { MainPageComponent } from '../public/main-page/main-page.component'
import { LegaleInformationComponent } from './legale-information/legale-information.component';
import { CookieInformationComponent } from './cookie-information/cookie-information.component';

const APP_ROUTES_PUBLIC: Routes = [
  { path: 'home', component: MainPageComponent },
  { path: 'legal', component: LegaleInformationComponent },
  { path: 'cookie', component: CookieInformationComponent }
];

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

private-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { AdminComponent } from './admin/admin/admin.component';
import { UploadFileComponent } from './admin/upload-file/upload-file.component';
import { QRCreateComponent } from './admin/qr-code-management/create/create.component';
import { QRUpdateComponent } from './admin/qr-code-management/update/update.component';

const APP_ROUTES_PRIVATE: Routes = [
  { path: 'admin', component: AdminComponent },
  { path: 'admin/upload-file', component: UploadFileComponent },
  { path: 'admin/qr-code-management/create', component: QRCreateComponent },
  { path: 'admin/qr-code-management/update', component: QRUpdateComponent }
];

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

【问题讨论】:

    标签: javascript angular typescript routes


    【解决方案1】:

    查看你的应用路由模块声明:

    const APP_ROUTES: Routes = [
      { path: '', redirectTo: '/home', pathMatch: 'full' },
      { path: '**', component: NotFoundComponent }
    ];
    
    

    如果有人访问,例如“http://localhost:3000/”,您会将他重定向到“http://localhost:3000/home”。但是你没有'home'路径的路由声明,所以路由器会显示NotFoundComponent

    您需要为“home”路径添加声明。例如:

    const APP_ROUTES: Routes = [
      { path: '', redirectTo: '/home', pathMatch: 'full' },
      { path: 'home', 
        loadChildren: () => import('./public.module').then(m => m.PublicModule) },
      { path: '**', component: NotFoundComponent }
    ];
    
    

    注意 1: 您需要在 PublicModule 中使用 path: '' 路由才能使其工作。可能您必须将路径“家”更改为简单的空路径。

    注意 2: 我假设您想延迟加载您的模块。您可以阅读更多相关信息:https://angular.io/guide/lazy-loading-ngmodules

    【讨论】:

    • 此解决方案有效,但仅适用于“/home”。我是否需要在 app-routing 模块上添加我的所有路由(私有和公共)?
    • PublicModule 中的其他路由可以使用类似“home/legal”的路径。也许您应该在 app 模块中添加一些前缀,例如“public”(而不是“home”)。然后您可以访问路径“/public/home”下的 MainPageComponent。你可以用 PrivateModule 做同样的事情
    • 我找到了问题所在。事实上,我忘记在 app.module.ts 上导入我的 SharedModule 了!很奇怪,因为我从 2 个月开始就开始工作了,而且我从来没有遇到过关于这个 SharedModule 的错误......事实上,现在一切都在使用我在帖子的第一条消息中呈现的设置。感谢您的宝贵时间
    猜你喜欢
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    相关资源
    最近更新 更多