在 Cordova DeviceReady 事件后调用 Angular 模块导入



我需要在外部库上调用 .forRoot(plugin),在 cordova 的 deviceReady 事件触发后,使用 cordova 插件作为参数。(所以我知道插件已加载)

我的主要 .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 之后调用,并且这个引导过程应该从 AppModule 的导入部分调用TcpCommunicationModule.forRoot(window.Socket)。但是,我的实际控制台输出显示.forRoot()在引导程序之前被调用,即:

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

如何让 .forRoot() 作为引导过程的一部分被调用(即,在设备准备就绪之后)?如果我移动它调用按钮单击或类似的东西,为时已晚,我收到一条静态注入器错误消息,指出"tcpSocket"不存在。

这被放弃了。科尔多瓦插件在全局范围内将自己破坏为可用。对键入的控制较少,但外部库可以访问它们,因此实现了功能。

最新更新