У меня есть приложение 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()
вызывается вручную из конструктора
Я не хочу этого, потому что это означает, что приложение отображается до фактической загрузки конфигурации.
Router Resolve
здесь будет полезно. - person Rahul Singh   schedule 28.08.2017albumConfig.id= document.querySelector('app-element').getAttribute('data-id');
вместо этого? - person Günter Zöchbauer   schedule 28.08.2017