Получить параметр из HTML до завершения загрузки

У меня есть приложение Angular на основе Seed. Я хочу, чтобы он дождался загрузки всех данных, прежде чем что-либо отображать. Это делается с помощью провайдера в моем app.module.ts:

providers: [
  AlbumConfig,
  UserConfig,
  {
    provide: APP_INITIALIZER,
    useFactory: (config: AlbumConfig) => () => config.load(),
    deps: [AlbumConfig],
    multi: true
  }
],

Проблема в том, что config.load (который в конечном итоге запускает resolve(true)) нуждается в идентификаторе, указанном на странице HTML сервером:

<rmalbum-app data-id="<?php print $album_id; ?>">Loading...</rmalbum-app>

Единственный способ, которым я нашел этот параметр, - это конструктор app.component:

albumConfig.id= this.elementRef.nativeElement.getAttribute('data-id');

Проблема в том, что этот конструктор вызывается только после инициализации.

Так что у меня либо есть, в хронологическом порядке:

  • config.load()
  • "Загрузка..." исчезает
  • Вызывается конструктор app.component, я получаю идентификатор, слишком поздно для config.load

или, если я удалю APP_INITIALIZER и поставлю config.load() в конструктор компонента:

  • "Загрузка..." исчезает
  • вызывается конструктор app.component, я получаю идентификатор
  • config.load() вызывается вручную из конструктора

Я не хочу этого, потому что это означает, что приложение отображается до фактической загрузки конфигурации.


person Kodiak    schedule 01.08.2017    source источник
comment
Я думаю, что просто иметь Router Resolve здесь будет полезно.   -  person Rahul Singh    schedule 28.08.2017
comment
Как насчет использования albumConfig.id= document.querySelector('app-element').getAttribute('data-id'); вместо этого?   -  person Günter Zöchbauer    schedule 28.08.2017
comment
@GünterZöchbauer, пожалуйста, опубликуйте это как ответ.   -  person Kodiak    schedule 04.09.2017


Ответы (1)


Вам не нужно ждать, пока Angular инициализирует корневой компонент, атрибут уже добавлен статически к index.html и не требует чтения Angular.

Просто используйте

albumConfig.id = document.querySelector('app-element')
    .getAttribute('data-id'‌​);
person Günter Zöchbauer    schedule 04.09.2017