PreloadAllModules вызывают ReferenceError: Невозможно получить доступ к myModule до инициализации - PullRequest
0 голосов
/ 10 января 2020

[ИСПОЛЬЗОВАНИЕ: Angular 8, Chrome79, Ioni c 4, режим разработки (ioni c serve)]

У меня проблема с моим Angular Router, я включил PreloadAllModules и в зависимости от того, какой модуль будет первым в моем определении маршрутов, он вызовет ReferenceError: Cannot access 'myModule' before initialization для другого.

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

const routes: Routes = [
  {
    path: "",
    pathMatch: "full",
    redirectTo: "home"
  },
  {
    loadChildren: () => import("./home/home.module").then((m) => m.HomePageModule),
    path: "home"
  },
  {
    loadChildren: () => import("./list/list.module").then((m) => m.ListPageModule),
    path: "list"
  },
  {
    loadChildren: () =>
      import("./myFirstModule/app/myFirstModule.module").then((m) => m.MyFirstModule),
    path: "myFirstModule"
  },
  {
    loadChildren: () =>
      import("./mySecondModule/app/mySecondModule.module").then((m) => m.mySecondModule),
    path: "mySecondModule"
  }
];

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

Приведенный выше код сработает: ReferenceError: Cannot access 'mySecondModule' before initialization при нажатии на ссылку в моем меню, НО ошибка не сработает, если я получу доступ к маршруту напрямую по URL!

Если я переверну myFirstModule и mySecondModule, например, так:

const routes: Routes = [
  {
    path: "",
    pathMatch: "full",
    redirectTo: "home"
  },
  {
    loadChildren: () => import("./home/home.module").then((m) => m.HomePageModule),
    path: "home"
  },
  {
    loadChildren: () => import("./list/list.module").then((m) => m.ListPageModule),
    path: "list"
  },
  {
    loadChildren: () =>
      import("./mySecondModule/app/mySecondModule.module").then((m) => m.mySecondModule),
    path: "mySecondModule"
  },
  {
    loadChildren: () =>
      import("./myFirstModule/app/myFirstModule.module").then((m) => m.MyFirstModule),
    path: "myFirstModule"
  }
];

Ошибка сработает при переходе к myFirstModule: ReferenceError: Cannot access 'myFirstModule' before initialization но это будет работать, если я получу доступ напрямую через URL ....

Если я удаляю PreloadAllModules, я могу в первый раз перейти к любому модулю, но затем, когда я получаю доступ к другому модулю, я получаю ошибка моих библиотек: ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'prototype' of undefined TypeError: Cannot read property 'prototype' of undefined at sax.js:222

myFirstModule

export function createTranslateLoader(http: HttpClient): TranslateHttpLoader {
  return new TranslateHttpLoader(http, "./assets/i18n/", ".json");
}

@NgModule({
  declarations: [
    MyFirstModuleComponent,
    ...
  ],
  entryComponents: [
    ...
  ],
  exports: [],
  imports: [
    CommonModule,
    IonicModule,
    MyMaterialModule,
    MyStore1Module,
    RouterModule.forChild([
      {
        component: MyFirstModuleComponent,
        path: ""
      }
    ]),
    TranslateModule.forChild({
      loader: {
        deps: [HttpClient],
        provide: TranslateLoader,
        useFactory: createTranslateLoader
      }
    })
  ],
  providers: [MyService]
})
export class MyFirstModule{}

MySecondModule

registerLocaleData(_default, "fr");

@NgModule({
  declarations: [
    MySecondModuleComponent,
    ...
  ],
  entryComponents: [
    ...
  ],
  imports: [
    CommonModule,
    MyMaterialModule,
    MatDialogModule,
    ClickOutsideModule,
    MyStore2Module,
    MyStore3Module,
    AngularSplitModule.forChild(),
    HighchartsChartModule,
    RouterModule.forChild([
      {
        component: MySecondModuleComponent,
        path: ""
      }
    ])
  ],
  providers: [
    {
      provide: LOCALE_ID,
      useValue: "fr-FR"
    }
  ]
})
export class MySecondModule{}

1 Ответ

0 голосов
/ 15 января 2020

Я нашел решение.

Сотрудник импортировал sax без npm, что вызвало конфликт между xml2 js и jszip из-за этой библиотеки.

Я установил sax через npm и удалил ручной импорт, и теперь он работает.

...