鍍金池/ 問答/HTML5/ Angular5懶加載問題undefined is not a function

Angular5懶加載問題undefined is not a function

最近將angular4項(xiàng)目升級到angular5之后遇到了一個問題,loadChildren對應(yīng)的路由都無法跳轉(zhuǎn)
編譯正常,瀏覽器運(yùn)行報錯:

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:13), <anonymous>:19: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:13), <anonymous>:19: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 <anonymous>

代碼:

{
  path: 'set',
  loadChildren: 'app/setting/setting.module#SettingModule'
},
// setting.module.ts
@NgModule(
  {
    imports:
      [
        CommonModule,
        FormsModule,
        SettingRouteModule,
        SystemModule,
        PopupModule
      ],
    declarations:
      [
        SettingComponent,
        ScannerHelpComponent
      ],
    exports:
      [],
    providers:
      [],
    entryComponents: [
      ScannerHelpComponent
    ]
  }
)
export class SettingModule
{
}
// setting.route.module.ts
@NgModule({
  imports:
    [
      RouterModule.forChild([
        {
          path: 'set',
          component: SettingComponent
        }
      ])
    ]
})
export class SettingRouteModule
{
}

當(dāng)我把loadChildren注釋掉不用懶加載的時候,路由就可以跳轉(zhuǎn),這是什么問題

回答
編輯回答
舊螢火

已經(jīng)解決,在app.module.ts的imports里面刪除進(jìn)行懶加載的模塊

// 懶加載
{
  path: 'set',
  loadChildren: 'app/setting/setting.module#SettingModule'
},
// app.module.ts
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    FormsModule,
    // 非懶加載模塊
    PopupModule,
    CoreModule,
    PipeModule,
    RoutesModule,
    CashRegisterModule,
    // 懶加載模塊
    // SettingModule
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

同時,在setting.route.module.ts里面path寫空:

// setting.route.module.t
@NgModule({
  imports:
    [
      RouterModule.forChild([
        {
          // path: 'set',
          path: '',
          component: SettingComponent
        }
      ])
    ],

  exports:
    [
      RouterModule
    ],

  providers:
    []
})
export class SettingRouteModule
{
}

原來的寫法其實(shí)并沒有實(shí)現(xiàn)懶加載,但是angular4不是出錯,但是在angular5就會提示懶加載的錯誤

2017年8月29日 10:54
編輯回答
安若晴

我也遇到了 那你解決了嗎?

2018年3月28日 01:30
編輯回答
檸檬藍(lán)

我也遇到同樣的錯誤,有可能是你沒引入RouterModule模塊(@angular/router下)。或者直接重新npm install一下,把模塊重新下一遍

2017年8月4日 17:37