Токен инжектора PLATFORM_INITIALIZER не работает

#angular #angular7

#угловатый #angular7 #angular

Вопрос:

Проблема Токен PLATFORM_INITIALIZER не работает и не выполняется после инициализации платформы.

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

В документации A function that will be executed when a platform is initialized. также говорится, что существует очень много документации об использовании этого токена и примеров. https://angular.io/api/core/PLATFORM_INITIALIZER

Уже пробовал, я пробовал использовать PLATFORM_INITIALIZER аналогично тому, как он проходил модульное тестирование, но не добился никакого успеха. https://github.com/angular/angular/blob/f8096d499324cf0961f092944bbaedd05364eea1/packages/platform-browser/testing/src/browser.ts

ссылка на стекблитц https://stackblitz.com/edit/angular-zza3af?file=src/app/app.module.ts

 function initBrowserTests() {
  window.alert('PLATFORM_INITIALIZER called');
}

const featureFlagsFactory = () => {
  window.alert('APP_INITIALIZER called');
  return () => {
    return {};
  };
};

export const appInitializers = [
  {
    provide: APP_INITIALIZER,
    useFactory: featureFlagsFactory,
    multi: true
  },
  {
    provide: PLATFORM_INITIALIZER,
    useValue: initBrowserTests,
    multi: true
  },
];

@NgModule({
  providers: [ appInitializers ],
  imports:      [ BrowserModule, FormsModule ],
  declarations: [ AppComponent, HelloComponent ],
  bootstrap:    [ AppComponent ],
})
export class AppModule { }
  

Ожидание initBrowserTests() Должно было быть вызвано Fn, которое я хотел бы использовать для инициализации моего AuthService.

Ответ №1:

Предполагается, что этот токен должен передаваться в createPlatformFactory или через extraProviders него, когда мы вызываем, например platformBrowserDynamic :

 platformBrowserDynamic([{
  provide: PLATFORM_INITIALIZER,
  useValue: initBrowserTests,
  multi: true
}]).bootstrapModule(AppModule)
  

Разветвленный стекблитц

Комментарии:

1. Спасибо @yurzui, он работает, но ИНИЦИАЛИЗАЦИЯ PLATFORM_INITIALIZER происходит до APP_INITIALIZER, есть ли какой-либо другой токен, который я могу использовать для начальной загрузки моего AuthService после инициализации приложения.

2. Конечно, это происходит и раньше, поскольку платформы создаются первыми

3. знаете ли вы какой-нибудь токен, который я могу использовать для инициализации моего AuthService после загрузки приложения?

4. @yurzui у вас есть внутренняя информация? откуда вы это знаете? 🙂 когда вы говорите «например», есть ли у вас другой пример?