angular - 在 Cordova DeviceReady 事件之后调用 Angular 模块导入
问题描述
在触发了cordova的deviceReady事件后,我需要使用cordova插件作为参数在外部库上调用.forRoot(plugin)。(所以我知道插件已经加载)
我的主要 .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”不存在。
解决方案
这被放弃了。Cordova 插件会在全局范围内自我破坏。对输入的控制较少,但外部库可以访问它们,因此实现了功能。
推荐阅读
- facebook - 为什么 Facebook Pixel Helper 在页面上发现两个像素 - PageView 和 fb_page_view?
- apache - WAMP 没有启动,因为使用了一次 Skype,即使在它被卸载后也是如此
- r - 优雅的函数编写方式
- groovy - groovy.lang.MissingPropertyException:没有这样的属性:
- ansible - 如何在 Ansible AWX/Tower 中添加远程主机?
- appium - waitForElement 不是 JSON 响应,当尝试访问按钮元素时
- ios - SWIFT4:如何让两个点击手势识别器一起工作
- css - CSS网格奇怪的行为
- node.js - 在 docker-compose 中安装 src-dir 时,如何从主机“隐藏”node_modules-dir?
- javascript - 使用 Lodash 查找对象的数组是否包含来自另一个数组的元素