Angular 使用公共提供程序延迟加载

Angular 使用公共提供程序延迟加载,angular,typescript,ionic-framework,ionic2,ionic3,Angular,Typescript,Ionic Framework,Ionic2,Ionic3,我已经在爱奥尼亚3项目上实现了延迟加载模式。它工作得非常好。 但我有一个问题。假设我需要在应用程序上实现本机的StatusBar功能。因此,我必须在每个页面上以不同的方式实现它,我将其放在app.module.ts上,如下所示 providers: [ StatusBar, ] 这是一种很好的方法,还是我需要在每个组件的模块上插入StatusBar作为provider?对我来说,这似乎是多余的工作。但最好的方法是什么?为什么呢?如果您希望该服务在全球范围内使用,您可以将状态栏添加到Ap

我已经在爱奥尼亚3项目上实现了延迟加载模式。它工作得非常好。 但我有一个问题。假设我需要在应用程序上实现本机的
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
    ],