代码之家  ›  专栏  ›  技术社区  ›  Leo Bottaro

角度2路由返回空白页,无错误

  •  5
  • Leo Bottaro  · 技术社区  · 7 年前

    我正在将SPA代码库从angular 2.0.0升级到2.4.10(angular router 3.4.10)。但现在,最奇怪的事情发生了:一些路由工作得很好,但一些路由什么也不返回(像一个空白组件),而且我的任何调试前端上都绝对没有记录任何错误

    下面是我们实现的提炼版本:主“子”路由是延迟加载的,但加载的模块急切地加载以下子路由

    例子:

    www.hostname.com/clients <- Lazy load
    www.hostname.com/clients/details <- Eager loaded by the "Clients" module
    

    我的主应用程序路由(src/app/app.routing.ts)上有以下代码:

    import { Routes, RouterModule } from '@angular/router';
    
    const appRoutes: Routes = [
      { path: 'clients', loadChildren: () => System.import('../clients/clients.module').then(m => m['ClientsModule']) },
      ...moreRoutes
    ];
    
    export const appRouting = RouterModule.forRoot(appRoutes);
    

    然后在(src/clients/clients.routing.ts)中:

    import { Routes, RouterModule } from '@angular/router';
    import { Clients } from './'; // I have a index.ts file that exports the component plus some more stuff, so loading from this relative path works just fine
    
    const clientRoutes: Routes = [
      { path: 'test', component: Clients }, // for testing porpuses
      { path: '', component: Clients }, // "Normal" route that should work like in all my other modules
      ...MoreRoutes
    ];
    
    export const clientsRouting = RouterModule.forChild(clientRoutes);
    

    然后将clientsRouting常量导入ClientsModule并传递给导入:[]装饰器。

    现在是路线 www.hostname.com/clients 只返回一个空白组件。但是路线 www.hostname.com/clients/test 正常工作

    现在我完全不知道怎么了。我甚至比较了两个不同但相似的模块(一个工作,一个不工作),但没有发现明显的编码差异。

    项目中的所有组件都是这样实现的,在Angular 2.0.0上运行良好

    编辑:更多信息:

    • 我正在使用带有一些插件的webpack来进行丑化、lint和其他一些小调整。在dev中,我们使用webpack dev服务器(2.9.6)来侦听和重新编译代码,生产和开发的配置都有这个问题。由于一些低级的依赖关系,我无法在没有通过webpack的情况下运行应用程序,但我不认为webpack是这里的问题,我只是以防万一。
    • 当这个bug发生时,不会发生重定向,它只是停留在那里,就像什么都没发生一样。
    • 我主要关注的是ATM test 子路由指向与 '' 路线,它工作,而直接 '' 一个没有;使用跟踪路线 { enableTracing: true } 两者之间没有任何区别。
    6 回复  |  直到 7 年前
        1
  •  10
  •   Leo Bottaro    7 年前

    我发现错误:

    我在 Clients 模块正在导入另一个路由模块,该模块覆盖了 '' 路由到空组件,因此为空页。

    我是如何找到它的:

    使用 Augury ,一个chrome扩展,用于调试Angular应用程序,我可以看到路由器树正在注册一些它不应该注册的东西。当我删除另一个模块的路由时,一切都得到了修复。

    我想花点时间感谢所有试图帮助我的人,对于我在这里得到的提示,一切都很有帮助!非常感谢。

        2
  •  3
  •   Arnaud P    7 年前

    简而言之(只是一个提示)

    我也遇到过类似的问题(同样是在升级Angular BTW之后),原因很简单: Import order matters! 升级依赖项时尽量保持整洁是个坏主意。

    更多详细信息

    因为我的基本路由模块看起来像

    @NgModule({
      imports: [RouterModule.forRoot([{ path: '**',   redirectTo: ''}])],
      exports: [RouterModule]
    })
    export class AppRoutingModule {}
    

    当我移动它的时候 之前 导入中的其他功能模块,任何请求都会自动重定向到“”,并且从未加载任何组件。没有任何错误。

    @NgModule({
      imports: [
        AppRoutingModule,  // <= need to move that one at the end
        SomeFeatureModule,
      ],
      // more stuff ...
    })
    export class AppModule {}
    

    当然,这只是您案例中可能出现错误的一个提示,如果不看完整的代码,我无法确定。

        3
  •  2
  •   Muizz Mahdy    5 年前

    在我的例子中,索引中基元素的href。html不正确。更正为 <base href="/"> 它成功了。

        4
  •  0
  •   Caleb Grams    6 年前

    我的问题是,在单击路由器按钮之前,我将CSS设置为隐藏。必须更改内容设置为淡入的方式。

        5
  •  0
  •   Milan    5 年前

    这可能会帮助某人: 我正在将我的网站从PHP迁移到Angular,我也遇到过同样的问题,即空白页面。问题的原因是我页面中的PHP代码。当最后一点被删除后,空白页就消失了。

        6
  •  0
  •   xinthose    4 年前

    我的问题解决了 tsconfig.json . 我达成了目标 es6 而不是 esnext 并已使用

    "lib": [
      "es2019",
      "dom"
    ],
    

    我还设置 "allowJS": true 感谢上帝,现在我的间歇性黑屏导航问题消失了。