Вызов импорта модуля Angular после события Cordova DeviceReady

#angular #cordova

#angular #кордова

Вопрос:

Мне нужно вызвать .forRoot (плагин) во внешней библиотеке с плагином cordova в качестве параметра после запуска события cordova deviceReady. (поэтому я знаю, что плагин загружен)

мой файл main .ts содержит это:

 let onDeviceReady = () => {
  console.log('deviceready');
  platformBrowserDynamic().bootstrapModule(AppModule)
    .catch(err => console.error(err));
}

document.addEventListener('deviceready', onDeviceReady, false);
  

мой файл app.module.ts содержит:

  imports: [
    BrowserModule,
    AppRoutingModule,
    TcpCommunicationModule.forRoot(window.Socket)
  ],
  providers: [TcpCommunicationService],
  

Где TcpCommunicationService — это служба TcpCommunicationModule, которая находится во внешней библиотеке (которой мы управляем).

TcpCommunicationModule.ts содержит это:

 @NgModule({
  declarations: [TcpCommunicationComponent],
  imports: [],
  exports: [TcpCommunicationComponent]
})
export class TcpCommunicationModule {
  public static forRoot(tcpSocket: any): ModuleWithProviders {
    console.log('forRoot called with object:');
    console.log(tcpSocket);
    return {
      ngModule: TcpCommunicationModule,
      providers: [
        TcpSocketFactoryService,
        {
          provide: 'tcpSocket',
          useValue: tcpSocket
        }
      ]
    };
  }
}
  

и, наконец, TcpSocketFactoryService.ts содержит:

 export class TcpSocketFactoryService {
  constructor(@Inject('tcpSocket') private tcpSocket) {}
}
  

я ожидаю, что после deviceready должен быть вызван bootstrap, и этот процесс начальной загрузки должен вызываться TcpCommunicationModule.forRoot(window.Socket) из раздела импорта AppModule. Однако мой фактический вывод на консоль показывает, что .forRoot () вызывается перед начальной загрузкой, т.Е.:

 'forRoot called with object:'
undefined
'deviceready'
'Angular is running in the development mode. Call enableProdMode() to enable the production mode.'
  

Как я могу заставить .forRoot () вызываться как часть процесса начальной загрузки (т. Е. После готовности устройства)? Если я переведу его вызов на нажатие кнопки или тому подобное, будет слишком поздно, и я получу сообщение об ошибке staticInjector о том, что ‘TCPSocket’ отсутствует.

Ответ №1:

Это было отменено. Плагины Cordova закрываются как доступные в глобальной области. Меньше контроля над набором текста, но внешняя библиотека может получить к ним доступ, поэтому функциональность достигнута.