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