Angular: Angular5.x lazyLoadの問題、未定義は関数ではありません

作成日 2018年04月17日  ·  20コメント  ·  ソース: angular/angular

Angularバージョンフォーム4.xを5.xに更新すると、エラーが表示されます。

 core.js:1449エラーエラー:キャッチされていません(約束されています):TypeError:未定義は関数ではありません
 TypeError:未定義は関数ではありません
 Array.mapで()。
 webpackAsyncContextで(./src/$$_lazy_route_resourceでの評価怠惰な再帰(main.bundle.js:formatted:17)、:657:34)
 SystemJsNgModuleLoader.loadAndCompile(core.js:6570)で
 SystemJsNgModuleLoader.load(core.js:6554)で
 RouterConfigLoader.loadModuleFactory(router.js:4595)で
 RouterConfigLoader.load(router.js:4575)で
 MergeMapSubscriber.eval [プロジェクトとして](router.js:2061)
 MergeMapSubscriber._tryNext(mergeMap.js:128)で
 MergeMapSubscriber._next(mergeMap.js:118)で
 MergeMapSubscriber.Subscriber.next(Subscriber.js:95)で
 Array.mapで()。
 webpackAsyncContextで(./src/$$_lazy_route_resourceでの評価怠惰な再帰(main.bundle.js:formatted:17)、:657:34)
 SystemJsNgModuleLoader.loadAndCompile(core.js:6570)で
 SystemJsNgModuleLoader.load(core.js:6554)で
 RouterConfigLoader.loadModuleFactory(router.js:4595)で
 RouterConfigLoader.load(router.js:4575)で
 MergeMapSubscriber.eval [プロジェクトとして](router.js:2061)
 MergeMapSubscriber._tryNext(mergeMap.js:128)で
 MergeMapSubscriber._next(mergeMap.js:118)で
 MergeMapSubscriber.Subscriber.next(Subscriber.js:95)で
 resolvePromise(zone.js:814)で
 resolvePromise(zone.js:771)で
 evalで(zone.js:873)
 ZoneDelegate.invokeTask(zone.js:421)で
 Object.onInvokeTask(core.js:4751)で
 ZoneDelegate.invokeTask(zone.js:420)で
 Zone.runTask(zone.js:188)で
 drainMicroTaskQueue(zone.js:595)で
 で

私のコード:

 '@ angle / core'から{ModuleWithProviders}をインポートします;
 import {Routes、RouterModule} from '@ angle / router';
 './rbac/rbac.service'から{RbacService}をインポートします。
 constルート:ルート= [
 {{
 道: ''、
 redirectTo: '/ page / index / main'、
 pathMatch: 'フル'
 }、
 {{
 パス: 'ページ'、
 コンポーネント:MitLayoutComponent、
 canActivate:[RbacService]、
 子供達: [
 {パス: 'インデックス'、 
 loadChildren: 'app / modules / index / index.module#IndexModule'、 
 canActivate:[RbacService]}、 
 ];
 export const AppRoutes:ModuleWithProviders = RouterModule.forRoot(routes、{useHash:true});
 Angular CLI:1.7.4
ノード:8.9.4
 OS:win32 x64
角度:5.2.10
 ...アニメーション、共通、コンパイラ、コンパイラ-CLI、コア、フォーム
 ... http、platform-b​​rowser、platform-b​​rowser-dynamic、router

 @ angle / cli:1.7.4
 @ angle-devkit / build-optimizer:0.3.2
 @ angle-devkit / core:0.4.9
 @ angle-devkit / schematics:0.3.2
 @ ngtools / json-schema:1.2.0
 @ ngtools / webpack:1.10.2
 @ schematics / angle:0.3.2
 @ schematics / package-update:0.3.2
タイプスクリプト:2.4.2
 webpack:3.11.0

最も参考になるコメント

私と同じようにGoogle経由でこの問題を見つけた他の人のために:モジュールを遅延ロードしようとしたときに同じ問題が発生しましたが、他の回答は役に立ちませんでした。 遅延読み込みモジュールを誤ってapp-moduleにインポートしたことに気付きました。

NgModule({
  ....
  imports: [
    .....
    MyCustomModule,    //<--- This needs to be removed if you lazy load!
    AppRoutingModule,
  ],
  bootstrap: [AppComponent],

})

それが誰かを助けることを願っています...

全てのコメント20件

角度/角度の重複-cli#9825

ngserve--aotの問題を修正しました

私と同じようにGoogle経由でこの問題を見つけた他の人のために:モジュールを遅延ロードしようとしたときに同じ問題が発生しましたが、他の回答は役に立ちませんでした。 遅延読み込みモジュールを誤ってapp-moduleにインポートしたことに気付きました。

NgModule({
  ....
  imports: [
    .....
    MyCustomModule,    //<--- This needs to be removed if you lazy load!
    AppRoutingModule,
  ],
  bootstrap: [AppComponent],

})

それが誰かを助けることを願っています...

@ThomasEgどうもありがとう、これは本当に私のベーコンを救った! ドキュメントはこれについて「注意を向ける」必要があり、これについて非常に明確にする必要があるようです。 男...とても多くの時間を過ごしました。

@ThomasEgソリューションは私にとって完璧に機能しました、ありがとう!

@ThomasEgあなたはすぐに私のさらに3-4時間を節約しました。 ありがとう。

@ThomasEg完璧なソリューション。 どうもありがとう!

thnxs ..私はこれで問題を抱えていました

ありがとう

通常、遅延ロードされたAngularモジュールが生成されたときにAppModuleimportsオプションに追加されたのはAngularCLIです。

こんにちは私は遅延読み込みの問題を解決しました、そしてそれはエラーなしでうまく動作するように見えます
遅延ロードされた子ごとに、canLoad returntrueを使用してダミーガードを追加します

{パス: 'pet-insurance'、canLoad:[PetGuard]、loadChildren: './_ modules / Insurance / Pet-Insurance / pet-insurance.module#PetInsuranceModule'}、

import {Injectable} from '@ angle / core';
import {Router、CanLoad、Route} from '@ angle / router';

@Injectable({
提供: 'ルート'
})
エクスポートクラスPetGuardはCanLoadを実装します{

constructor(private router: Router) { }

// checks if we can load the route concerning LifeInsurance
canLoad(route: Route): boolean {
    return this.petInsurance(route.path);
}

petInsurance(url: string): boolean {
    return true;
}

}

ゴードンカミングから
[email protected]

私と同じようにGoogle経由でこの問題を見つけた他の人のために:モジュールを遅延ロードしようとしたときに同じ問題が発生しましたが、他の回答は役に立ちませんでした。 遅延読み込みモジュールを誤ってapp-moduleにインポートしたことに気付きました。

NgModule({
  ....
  imports: [
    .....
    MyCustomModule,    //<--- This needs to be removed if you lazy load!
    AppRoutingModule,
  ],
  bootstrap: [AppComponent],

})

それが誰かを助けることを願っています...

ありがとう! これは、ルートだけでなく子モジュールにも適用されることに注意してください。 経験則では、モジュールのロードを遅らせる場合は、どのモジュールにも含めないでください。 親モジュールに子モジュールを追加することに慣れている場合、または過去に遅延読み込みモジュールを使用したことがない場合、これを破るのは難しい習慣になる可能性があります。

@ThomasEgありがとうございます!!!

私の場合、ngserve--aotでも動作します。 次の説明は、-aotフラグを使用しないことについてです。
遅延読み込みされたモジュールがアプリモジュールにインポートされていないことを確認するためにクロスチェックしました。 私が気付いたのは、遅延読み込みモジュールで宣言されたパスを直接使用すると(アプリルーティングモジュールで宣言されたコンテキストなしで)ページが読み込まれることです。 エラーは、フルパスを入力しようとしたときにのみ発生します。もちろん、それは私が必要としていることではありません。

@ThomasEg素晴らしい! ありがとう

@ThomasEg動作します。 ありがとう!!!

@ThomasEgどうもありがとう、あなたは私の日を救った。

'app-fixed-topbar'がWebコンポーネントの場合、このメッセージを抑制するために、このコンポーネントの '@ NgModule.schemas'に 'CUSTOM_ELEMENTS_SCHEMA'を追加します。
モジュールにCUSTOM_ELEMENTS_SCHEMAを含めると仮定します。エラーは解決されましたが、
app-fixed-topbar私のページに表示されません

この問題は、非アクティブのために自動的にロックされています。
同様の問題または関連する問題が発生した場合は、新しい問題を提出してください。

自動会話ロックポリシーの詳細をご覧ください。

_このアクションはボットによって自動的に実行されました。_

このページは役に立ちましたか?
0 / 5 - 0 評価