@Components providers属性和@Module providers?之间有什么区别?
两者都代表什么?
编辑
我有两个组成部分:LoginComponent和SigninComponent.另一方面,我使用的UserService是定制的库.这项UserService服务正在寻找一个opaquetoken BASE_PATH:
@Injectable()
export class UsersService {
constructor(@Optional()@Inject(BASE_PATH)
Run Code Online (Sandbox Code Playgroud)
并BASE_PATH是:
export const BASE_PATH = new OpaqueToken('basePath');
Run Code Online (Sandbox Code Playgroud)
这个opaqueToken在AppModule上设置:
@NgModule({
bootstrap: [ App ],
declarations: [
App,
ErrorComponent
],
providers: [
ENV_PROVIDERS,
Run Code Online (Sandbox Code Playgroud)
其中ENV_PROVIDERS被设置为根据environtment设置上environtment.ts:
if ('production' === ENV) {
enableProdMode();
PROVIDERS = [
...PROVIDERS,
// custom providers in production
{ provide: BASE_PATH, useValue: 'http://public.sample.com:8082/commty/cmng' }
];
} else {
// Development
PROVIDERS = [
...PROVIDERS,
// custom providers in development
{ provide: BASE_PATH, useValue: 'http://localhost:8082/commty/cmng' }
];
}
export const ENV_PROVIDERS = [
...PROVIDERS
];
Run Code Online (Sandbox Code Playgroud)
我正在设置所有:
@NgModule({
declarations: [
SigninComponent
],
providers: [ UsersService ]
})
export default class SigninModule {
Run Code Online (Sandbox Code Playgroud)
和
@NgModule({
declarations: [
LoginComponent
],
providers: [ UsersService ]
})
export default class LoginModule {
Run Code Online (Sandbox Code Playgroud)
因此,在组件上,我不会将任何服务作为提供者导入,我只声明它们.
不过,当我加载SigninModule所有网络请求时都会发送给localhost.但是,当我加载LoginModule请求被发送到localhost:8282
小智 19
如果您在组件内提供服务,它将是本地服务.因此,如果您有两个组件实例,那么您将拥有两个服务实例.
现在,如果您在模块中提供服务,它将是全局的,如果您有两个组件实例,它们将共享相同的服务实例.
告诉我,如果你不明白,我会提供一个关于plunker的例子.
| 归档时间: |
|
| 查看次数: |
5088 次 |
| 最近记录: |