создание углового пакета с RouterModule в качестве зависимости - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь создать пакет, используя Angular Library Starter

Все работает нормально, пока я не добавлю RouterModule.

Модуль, вызывающий проблему

import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ClientMenuComponent } from './client-menu/client-menu.component';
import { ClientMenuItemComponent } from './client-menu-item/client-menu-item.component';
import { RouterModule, Router, Routes } from '@angular/router';


@NgModule({
  imports: [
    CommonModule,
    RouterModule.forRoot([]) <---- Error: AoT compilation failed 
  ],
  declarations: [
    ClientMenuComponent,
    ClientMenuItemComponent,
  ],
  exports: [
    ClientMenuComponent,
    ClientMenuItemComponent
  ]
})
export class ClientMenuModule {
    static forRoot(): ModuleWithProviders {
        return {
            ngModule: ClientMenuModule,
            providers: []
        };
    }
    static forChild(): ModuleWithProviders  {
        return {
            ngModule: ClientMenuModule,
            providers: []
        };
    }
}

Это полная ошибка, которую я получаю.

Error during template compile of 'ClientMenuModule'
Function calls are not supported in decorators but 'RouterModule' was called.

Error: AoT compilation failed

Среда, которую я использую,

Angular CLI: 6.0.3
Node: 8.11.1
OS: darwin x64
Angular: 6.0.0

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вытащить вызов функции:

export const MyModule = RouterModule.forRoot([]);


@NgModule({
  imports: [
    CommonModule,
    MyModule   
  ],
  declarations: [
    ClientMenuComponent,
    ClientMenuItemComponent,
  ],
  exports: [
    ClientMenuComponent,
    ClientMenuItemComponent
  ]
})
0 голосов
/ 24 мая 2018

Если это библиотека или модуль, который будет импортирован в другие библиотеки / модули, вы НЕ ДОЛЖНЫ вызывать функцию .forRoot() при передаче ее в @NgModule.

RouterModule объявляет и экспортирует некоторыедирективы, например router-outlet, routerLink, routerLinkActive и т. д. Кроме того, он предоставляет некоторые службы, например, Router, ActivatedRoute и т. д. Чтобы избежать нескольких экземпляров служб, RouterModule определяет два метода: «forRoot» и «forChild».Как следует из названия, метод "forRoot" должен вызываться только корневым модулем, т.е. app.module, а forChild - другими функциональными модулями.Таким образом, вы по-прежнему можете использовать директивы, компоненты, каналы, экспортируемые этим модулем, и не получаете новые экземпляры сервисов.

Хотя это не определенно определяет корень вашей проблемы, она, скорее всего, разрешитваша проблема.(Также может помочь проблема )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...