我有一个有趣的问题。我有2个模块。 app.module.ts(AppModule)和listings.module.ts(ListingsModule)。 ListingsModule有一个服务,我们称之为服务A. A需要是一个单一的全局服务,这意味着所有其他组件和服务都需要能够与同一个A进行交互。
为此,我首先尝试在ListModule中声明A作为提供者,但是这没有按预期工作,因为它仅被声明为用于RichmondModule下的组件和服务的单例,但我还需要在其他模块下使用它并在AppModule下。因此,我得出结论,我需要从ListingsModule导出此服务并导入并在AppModule下提供此服务,但这不能按预期工作。
A是ListingsStoreService。
//Stores
import { ListingsStoreService } from './shared/listings-store.service';
//Modules
import { SharedModule } from './../shared/shared.module';
import { HeaderModule } from './../header/header.module';
@NgModule({
imports: [
SharedModule,
HeaderModule,
ListingsRoutingModule
],
declarations: [
ListingsComponent
],
exports: [
ListingsStoreService
],
providers: [ ]
})
export class ListingsModule {
}
以下代码要求我声明或导入ListingsStoreService,以便它可以导出。如果我声明ListingsStoreService然后它给我另一个错误。我显然只能提供这项服务。
这里的正确方法是什么?我如何使这项工作?
答案 0 :(得分:1)
它的一些模块(例如RouterModule)的角度是允许通过名为" forRoot"的静态函数创建同一模块的两个版本。按照惯例," forChild" " forRoot"可以包含全局服务,例如" ListingsStoreService"在它的提供者数组中," forChild"会省略它。然后你可以调用" ListingsModule.forRoot()"在AppModule导入数组中,并调用" ListingsModule.forChild()"在其他地方你需要" ListingsModule"。
@NgModule({
imports: [
SharedModule,
HeaderModule,
ListingsRoutingModule
],
declarations: [
ListingsComponent
]
})
export class ListingsModule {
static forRoot() : ModuleWithProviders {
return {
ngModule: ListingsModule,
providers: [ ListingsStoreService ]
};
};
static forChild() : ModuleWithProviders {
return {
ngModule: ListingsModule,
providers: []
};
};
};
答案 1 :(得分:0)
您的ListingsStoreService必须在
中导入imports: [
SharedModule,
HeaderModule,
ListingsRoutingModule,
ListingsStoreService
],
我认为这是你的问题。你能试试吗?我已经写了一个评论,但我需要50个声誉...所以这里是一个答案我不知道100%是否有效。
答案 2 :(得分:0)
它应该没有特殊配置。默认情况下,服务具有全局范围(只要声明它们的模块被急切加载)。您的初始配置(您在问题中描述的)应该有效。
在platform :ios, ‘8.0’
use_frameworks!
target 'BALKISFS' do
pod 'Telegram-iOS-SDK'
end
:
ListingsModule
然后在@NgModule({
providers: [ ListingsStoreService ]
})
export class ListingsModule {
}
中导入ListingsModule
:
AppModule
NB。 @NgModule({
imports: [ ListingsModule ]
})
export class AppModule {
}
必须急切加载,而不是懒惰加载。您的问题并未说明如何在您的案例中加载ListingsModule
。