fir*_*baa 31 javascript lazy-loading angular-routing angular angular-router
我正在从Angular 4.0.0升级到Angular 5.2.6
我正面临一些问题,让懒惰的模块加载工作.
使用角4.0.0,它工作正常,但现在,5.2.6,我点击我的重定向按钮时出现这样的错误:
core.js:1448 ERROR Error: Uncaught (in promise): TypeError: undefined is not a function
TypeError: undefined is not a function
at Array.map (<anonymous>)
at webpackAsyncContext (eval at ./src/$$_lazy_route_resource lazy recursive (main.bundle.js:27), <anonymous>:13:34)
at SystemJsNgModuleLoader.loadAndCompile (core.js:6558)
at SystemJsNgModuleLoader.load (core.js:6542)
at RouterConfigLoader.loadModuleFactory (router.js:4543)
at RouterConfigLoader.load (router.js:4523)
at MergeMapSubscriber.eval [as project] (router.js:2015)
at MergeMapSubscriber._tryNext (mergeMap.js:128)
at MergeMapSubscriber._next (mergeMap.js:118)
at MergeMapSubscriber.Subscriber.next (Subscriber.js:92)
at Array.map (<anonymous>)
at webpackAsyncContext (eval at ./src/$$_lazy_route_resource lazy recursive (main.bundle.js:27), <anonymous>:13:34)
at SystemJsNgModuleLoader.loadAndCompile (core.js:6558)
at SystemJsNgModuleLoader.load (core.js:6542)
at RouterConfigLoader.loadModuleFactory (router.js:4543)
at RouterConfigLoader.load (router.js:4523)
at MergeMapSubscriber.eval [as project] (router.js:2015)
at MergeMapSubscriber._tryNext (mergeMap.js:128)
at MergeMapSubscriber._next (mergeMap.js:118)
at MergeMapSubscriber.Subscriber.next (Subscriber.js:92)
at resolvePromise (zone.js:809)
at resolvePromise (zone.js:775)
at eval (zone.js:858)
at ZoneDelegate.invokeTask (zone.js:421)
at Object.onInvokeTask (core.js:4740)
at ZoneDelegate.invokeTask (zone.js:420)
at Zone.runTask (zone.js:188)
at drainMicroTaskQueue (zone.js:595)
at ZoneTask.invokeTask [as invoke] (zone.js:500)
at invokeTask (zone.js:1517)
Run Code Online (Sandbox Code Playgroud)
我的路由文件如下所示:
const homeRoutes: Routes = [
{
path: 'home', component: HomeComponent,
children: [
....
{
path: 'admin',
loadChildren: 'app/home/admin/admin.module#AdminModule',
canActivate: [AuthGuardAdmin]
},
]
},
];
@NgModule({
imports: [
CommonModule,
RouterModule.forChild(homeRoutes)
],
exports: [
RouterModule
],
declarations: []
})
export class HomeRoutingModule { }
Run Code Online (Sandbox Code Playgroud)
建议??
Mie*_* S. 17
我在这里app.module.ts提到的改变了我的进口顺序
所以你需要拥有它,例如:
imports: [
BrowserModule,
FormsModule,
HeroesModule,
AppRoutingModule
]
Run Code Online (Sandbox Code Playgroud)
最重要的是拥有第一个BrowserModule和最后一个AppRoutingModule.
Ram*_*ane 13
解决方案1
import lazy loaded module在顶部和router module最后一个地方,进口订单确实很重要.因为我们正在进行延迟加载,所以在我们进行路由之前必须存在延迟加载的模块.
imports: [
BrowserModule,
HeroModule, // Lazy-loaded module
AppRoutingModule
],
Run Code Online (Sandbox Code Playgroud)
解决方案2
通常Angular CLI会在生成时导入module到app-module.所以确保lazy-loaded模块没有app-module像这里提到的那样导入
Ger*_*rit 10
如https://github.com/angular/angular-cli/issues/9488#issuecomment-368871510中所述,它似乎可以使用ng serve --aot
ng service --aot虽然它可以编译您的代码,但不是解决方案,而只是掩盖。如果确定它不是CLI版本,请尝试以下解决方案。
您需要做的是确保您app.module.ts没有加载延迟加载的模块。
例如:
app.module.ts
imports: [
...
AppRouterModule,
FormsModule,
YourFeatureModule, <--- remove this
...
]
Run Code Online (Sandbox Code Playgroud)
确保YourFeatureMOdule通过routes
ie 加载:
app-routing.module.ts
loadChildren: '../app/feature.module#YourFeatureModule'
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
22685 次 |
| 最近记录: |