Angular 使用公共提供程序延迟加载
我已经在爱奥尼亚3项目上实现了延迟加载模式。它工作得非常好。 但我有一个问题。假设我需要在应用程序上实现本机的Angular 使用公共提供程序延迟加载,angular,typescript,ionic-framework,ionic2,ionic3,Angular,Typescript,Ionic Framework,Ionic2,Ionic3,我已经在爱奥尼亚3项目上实现了延迟加载模式。它工作得非常好。 但我有一个问题。假设我需要在应用程序上实现本机的StatusBar功能。因此,我必须在每个页面上以不同的方式实现它,我将其放在app.module.ts上,如下所示 providers: [ StatusBar, ] 这是一种很好的方法,还是我需要在每个组件的模块上插入StatusBar作为provider?对我来说,这似乎是多余的工作。但最好的方法是什么?为什么呢?如果您希望该服务在全球范围内使用,您可以将状态栏添加到Ap
StatusBar
功能。因此,我必须在每个页面上以不同的方式实现它,我将其放在app.module.ts
上,如下所示
providers: [
StatusBar,
]
这是一种很好的方法,还是我需要在每个组件的模块上插入
StatusBar
作为provider
?对我来说,这似乎是多余的工作。但最好的方法是什么?为什么呢?如果您希望该服务在全球范围内使用,您可以将状态栏添加到AppModule的提供商中。但是,如果状态栏
不仅仅是一项服务
,它可能会给您带来一些实例问题。(我对这种方法有一些问题)
您拥有的包含其服务的iEngine,I18nModule
(用于翻译)。通过将I18nModule
添加到AppModule的imports
,我将在I18nModule
中拥有多个服务实例
解决方法是使用forRoot()
:
然后在AppModule
中:
imports: [
I18nModule.forRoot(),
]
使用forRoot()
我们将把I18nModule
(及其服务,返回到您的问题)作为一个单例实例
总结:
如果它只是一个服务,那也没关系,但是如果它是一个模块的一部分,那么您必须注意不要将同一个服务实例化两次,然后您将花费数小时试图理解为什么“工作”服务没有完成它的工作
更新:
Angular旨在模块化,因此,鼓励为每个上下文创建模块,例如:
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
HttpModule,
BrowserAnimationsModule,
CoreModule,
LayoutModule,
I18nModule.forRoot(),
BarHandlingModule, // Example
InventedModule // Example too
],
这意味着,在阅读Angular的文档之后,您应该为您的核心功能创建一个模块,为您的用户上下文创建一个模块,为订单创建另一个模块,为客户创建另一个模块,等等,如果您知道我的意思的话
因此,不要在你的AppModule
中添加服务,而是尝试为你的应用程序中的每个主要上下文创建一个模块,并在AppModule
中的imports
中添加这些模块,即使@SrAxi的答案是完美的,但当在爱奥尼亚中使用Cordova插件时,并且因为这些插件只是用作提供者(而不是整个模块),您只需将它添加到app.module.ts
文件的providers数组中,一切都会正常工作
这是使用大多数cordova插件的推荐方法(因为它们不是模块,只是提供程序)如果模块不是延迟加载,您可以向提供程序注册一次根注入器向提供程序收费的多个模块,如果模块是延迟加载,则提供程序在子注入器中注册。当应用程序启动时,根注入器不允许添加新的Provider抱歉,我没有完全理解你所说的。你能提供更多信息吗?我已经在我的项目上实现了延迟加载,所以现在所有的组件都支持延迟加载@Alehn96因为它只是一个提供者(而不是整个模块),所以您可以将它添加到app.module.ts
文件的提供者数组中。这是使用大多数cordova插件的推荐方式(因为它们不是模块,只是提供程序)。我认为您的评论最适合爱奥尼亚环境
。您能回答这个问题吗?谢谢。@sebaferra希望你看到我上面的反馈没有@感谢您详细解释如何使用Angular处理它。但我想知道如何使用Ionic处理它。尤其是StatuBar
是一个Cordova插件。@Sampath噢,伙计!很抱歉不知道StatusBar
是Cordova插件!:汉克斯!:但是,我不知道状态栏是Cordova插件(无论如何,很高兴知道!谢谢!:P
imports: [
BrowserModule,
BrowserAnimationsModule,
FormsModule,
HttpModule,
BrowserAnimationsModule,
CoreModule,
LayoutModule,
I18nModule.forRoot(),
BarHandlingModule, // Example
InventedModule // Example too
],