【问题标题】:Angular Lazy Loading角度延迟加载
【发布时间】:2019-12-09 18:16:20
【问题描述】:

最近在延迟加载方面遇到了一些问题。 现在我不确定这是否应该发生(我已经尝试搜索这个问题,但如果我说实话,我什至不知道如何措辞)。

所以 我会像你通常做的那样做所有设置延迟加载模块的事情。从确保应用程序路由模块正确设置的一切:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';


const routes: Routes = [
  { 
    path: 'home', 
    loadChildren: './shared/modules/homepage/homepage.module#HomepageModule' 
  },
];

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

然后,确保使用延迟加载模块(在本例中为主页模块)正确设置所有内容:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Routes, RouterModule } from '@angular/router';

//~~~~ Important:
import { HomeMainComponent } from './components/home-main/home-main.component';

const homeRoutes: Routes = [
  { 
    path: '',
    component: HomeMainComponent, 
  }
]


@NgModule({
  declarations: [
    HomeMainComponent
  ],
  imports: [
    CommonModule,
    RouterModule.forChild(homeRoutes),
  ],
  exports: [
    HomeMainComponent 
  ]
})
export class HomepageModule { }

现在我还没有在应用路由器模块中为 path: '' 做一个重定向路径,但是由于某种原因在 localhost:4200/ ,它加载了 home 模块。在八月,这是我目前看到的:

Augury Routing Tree

编辑* app.module.ts 的代码:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';

//~~~~ Important:
import { CoreModule } from './core/core.module';
import { SharedModule } from './shared/shared.module';
import { FeaturesModule } from './features/features.module';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    CoreModule,
    SharedModule,
    FeaturesModule,
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

编辑* 当我回家路线时的样子:

Edit* 将 homepage.module.ts 路由器更改为它自己的文件到 homepage-routing.module.ts:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

import { HomeMainComponent } from './components/home-main/home-main.component';


const homeRoutes: Routes = [
  { 
    path: '', 
    component: HomeMainComponent,
  },
];

@NgModule({
    declarations: [
        HomeMainComponent,
    ],
    imports: [RouterModule.forChild(homeRoutes)],
    exports: [
        HomeMainComponent,
        RouterModule]
})
export class HomepageRoutingModule { }

根据我的理解,我所做的一切都是正确的,而且我已经做了很多次才知道这里有问题。有人对我缺少的东西有任何想法吗?谢谢!

已解决****: 原来我使用的是 app-routing.module,而我应该使用 Shared.module 的路由模块。所以基本上,摆脱或 app-routing.module 并做我在 shared-routing.module 中所做的一切,这将解决问题。谢谢大家的帮助!

【问题讨论】:

  • 您使用的是哪个 Angular 版本?你使用延迟加载路由的方式在 Angular 7/8 左右发生了变化,我不记得确切的版本。
  • 我目前正在使用 8。尝试使用新方法创建延迟加载的路由并遇到相同的问题。 Brb 会仔细检查以防万一。
  • 我编辑了答案,你也应该导出你的 RouterModule...
  • 您在定义AppRoutingModule 的同一目录中真的有一个名为shared 的文件夹吗?
  • 是的,刚刚尝试了 Angular 8 的新方法,但仍然遇到同样的问题。路由器树看起来还是一样。

标签: angular typescript frontend lazy-loading


【解决方案1】:

新版本改变了延迟加载的方式,将路由配置重构为:

const routes: Routes = [
  { 
    path: 'home', 
    loadChildren: () => import('./shared/modules/homepage/homepage.module').then(m => m.HomepageModule)
  },
];

然后在 HomeModule 中导出 RouterModule:

@NgModule({
  declarations: [
    HomeMainComponent
  ],
  imports: [
    CommonModule,
    RouterModule.forChild(homeRoutes),
  ],
  exports: [
    HomeMainComponent,
    RouterModule 
  ]
})
export class HomepageModule { }

【讨论】:

  • 所以只是尝试将其切换到较新的方法,但仍然遇到相同的路由问题。会不会和router-outlet有关?
  • 你导出路由器模块了吗?
  • 是的,刚刚导出了路由器模块,问题依旧。
  • 当我转到 /home 路由时,还添加了路由器树的屏幕截图,如果这有帮助的话
  • 最终解决了这个问题。因为我使用了几个模块(核心、共享、功能注意仍然试图弄清楚如何使用像这样的角度),我犯了一个错误,试图从应用程序中延迟加载 home.module - routing.module ...基本上从我在过去工作过的旧示例中看到的以及来自不同在线资源的内容来看,我需要摆脱 app-routing.module 并创建一个路由模块对于 shared.module 并在那里做所有事情。很抱歉让我头疼,感谢您帮助我!!!
猜你喜欢
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多