Мне нужно вызвать .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 отсутствует.