Как дождаться инициализации библиотеки?

Вопрос в том, как сделать так, чтобы все дочерние компоненты дождались инициализации сервиса - который вернет объект карты.

Инициализация сервиса происходит в parent компоненте app.component и имеет референc на DOM элемент.

Так вот, остальные компоненты тоже используют этот сервис, чтобы получить доступ к карте - но не дожидаются ее полной инициализации.

Основном компонент:

import { Component } from "@angular/core";
import { ReonMapLibraryService } from "../../projects/reon-map-library/src/lib/reon-map-library.service";

@Component({
  selector: "app-root",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.scss"]
})
export class AppComponent {
  constructor(private ReonMapLibraryService: ReonMapLibraryService) {}

  ready() {
    return this.ReonMapLibraryService.ready();
  }
}


Шаблон компонента:

<lib-reon-map-library></lib-reon-map-library>
 <app-menu></app-menu>


Где <lib-reon-map-library></lib-reon-map-library> это дочерний компонент, в котором происходит инициализация сервиса:

@Component({
  selector: "lib-reon-map-library",
  template: `
    <div id="map-container" #mapContainer></div>
  `,
  styles: []
})
export class ReonMapLibraryComponent implements AfterViewInit {
  @ViewChild("mapContainer", { static: true }) map: ElementRef;

  constructor(private ReonMapLibraryService: ReonMapLibraryService) {}

  ngAfterViewInit(): void {
    this.ReonMapLibraryService.initialization(this.map.nativeElement);
  }
}


Проблема в том, что дочерние компоненты
<app-menu></app-menu>
 <app-menu2></app-menu2>

не дожидаются готовности сервиса из компонента <lib-reon-map-library></lib-reon-map-library>:

<lib-reon-map-library></lib-reon-map-library>
 <app-menu></app-menu>
 <app-menu2></app-menu2>


И затема падают, потому как тоже имеют зависимость от сервиса в конструкторе:
constructor(private ReonMapLibraryService: ReonMapLibraryService) {}
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 2
Xuxicheta
@Xuxicheta
инженер
Если сервис не сразу готов к работе из него должен торчать поток типа ready$. Который можно прицепить на ngIf на компоненте непример.
В целом из кода непонятно почему что-то падает.
Зависимость не должна приводить к падению, инжектор перед созданием экземпляра ищет или создает его зависимости, и проблема не в компоненте у вас, а в сервисе.
Ответ написан
zabudkin
@zabudkin
Инженер-системотехник, программист, админ, ТПУ!!!!
Где-то закралась рекурсия?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы