Angular трубы по умолчанию в библиотеке не работают - PullRequest
2 голосов
/ 21 апреля 2020

Я создаю библиотеку Angular для использования в большем проекте. Это будет подход с несколькими репо, при этом каждая из частей приложения будет библиотекой. У всех этих частей будут свои компоненты, трубы, услуги ...

Но мои первые тесты не работают. Я создал свою автономную библиотеку и компонент hello-world, собрал его с --watch, связал его с NPM с моим базовым проектом ... и он работает. Это показывает сообщение на экране. Проблема возникает, когда я пытаюсь добавить трубу любого вида, даже разрыв трубы по умолчанию. Если создать объект Date и использовать канал даты после сообщения, оно прерывается. То же с валютой или асинхронной c трубами.

Ошибка для канала данных:

Error: Uncaught (in promise): Error: StaticInjectorError(AppModule)[DatePipe -> InjectionToken LocaleId]: 
  StaticInjectorError(Platform: core)[DatePipe -> InjectionToken LocaleId]: 
    NullInjectorError: No provider for InjectionToken LocaleId!
Error: StaticInjectorError(AppModule)[DatePipe -> InjectionToken LocaleId]: 
  StaticInjectorError(Platform: core)[DatePipe -> InjectionToken LocaleId]: 
    NullInjectorError: No provider for InjectionToken LocaleId!
...

Ошибка для асинхронной c трубы:

Error: Uncaught (in promise): Error: StaticInjectorError(AppModule)[AsyncPipe -> ChangeDetectorRef]: 
  StaticInjectorError(Platform: core)[AsyncPipe -> ChangeDetectorRef]: 
    NullInjectorError: No provider for ChangeDetectorRef!
Error: StaticInjectorError(AppModule)[AsyncPipe -> ChangeDetectorRef]: 
  StaticInjectorError(Platform: core)[AsyncPipe -> ChangeDetectorRef]: 
    NullInjectorError: No provider for ChangeDetectorRef!
    at NullInjector.push.../../node_modules/@angular/core/fesm5/core.js.NullInjector.get (core.js:8896)
...

Модуль библиотеки выглядит так:

@NgModule({
  declarations: [HolaMundoTestComponent],
  imports: [
    CommonModule
  ],
  exports: [HolaMundoTestComponent]
})
export class HolaMundoTestModule { }

И компонент, который он экспортирует:

@Component({
  selector: 'lib-hola-mundo-test',
  // templateUrl: './hola-mundo-test.component.html',
  // template: `<h1>Hola mundo en fecha {{ dateFrom | date }}</h1>`,
  template: `<h1>Hola mundo en fecha {{ text | async }}</h1>`,
  styleUrls: ['./hola-mundo-test.component.scss']
})
export class HolaMundoTestComponent {
  public text = new BehaviorSubject<string>('MITEXTO');
  public dateFrom = new Date();
  public money = 123245.234555;
  // constructor(public holaMundoTest: HolaMundoTestService) {}
}

Есть идеи? Я импортирую CommonModule, который содержит все эти каналы по умолчанию, и это самая маленькая библиотека из возможных.

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Похоже на похожую проблему. Попробуйте включить опцию preserveSymlinks в вашем файле angular.json:

"architect": {
  "build": {
    "builder": "@angular-devkit/build-angular:browser",
    "options": {
      "preserveSymlinks": true,
0 голосов
/ 21 апреля 2020

В вашей библиотеке вы должны экспортировать в модуль все ваши компоненты и трубы. Затем импортируйте этот модуль, где это необходимо. Эта ссылка должна служить примером https://angular.io/guide/sharing-ngmodules

Если это не поможет, возможно, эта библиотека может быть полезной https://github.com/ng-packagr/ng-packagr. Используется для упаковки angular библиотек.

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