Вызов углового модуля импорта после события Cordova DeviceReady - PullRequest
0 голосов
/ 27 марта 2019

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

мой основной файл .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, и этот процесс начальной загрузки должен вызывать 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 Ответ

0 голосов
/ 06 июня 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...