我有一般的服务类和专门的服务类和公共组件,它们应该使用specialzied服务,具体取决于模块。
我在UpdateFormComponent
中有SharedModule
- 对于应用程序中的所有其他模块都是通用的。在实例化期间,我应该通过AbstractSaveService
- Module1SaveService
和Module2SaveService
的后代。这些服务在其他模块Module1
和Module2
中声明。
所以文件结构将是
\shared\shared.module.ts
update.form.component.ts
abstract.service.ts
\module1\save1.service.ts (extends AbstractSaveService)
users.component.ts (use UpdateFormComponent and Module1SaveService)
\module2\save2.service.ts (extends AbstractSaveService)
cameras.component.ts (use UpdateFormComponent and Module2SaveService)
@Component({
selector: 'update-form-component'
})
class UpdateFormComponent {
constructor (private s: AbstractSaveService) {}
}
@Component({
selector: 'users-component',
template: '<update-form-component></update-form-component>' // inject Module1SaveService
})
export class UsersComponent {}
@Component({
selector: 'cameras-component',
template: '<update-form-component></update-form-component>' // inject Module2SaveService
})
export class CamerasComponent {}
当我显示来自Module1
(UsersComponent
)和用户按下按钮的页面时,我希望显示UpdateFormComponent
并注入Module1SaveService
。当我显示来自Module2
(CamerasComponent
)和用户按下按钮的页面时,我想显示注入UpdateFormComponent
的{{1}}。我怎样才能做到这一点?
答案 0 :(得分:1)
您可以将Special1Service
添加到一个MyComponent
和Special2Service
的父级的提供商,添加到其他MyComponent
的父级的提供商。这意味着只有当两个组件都具有不同的父组件时,这才有效。
@Component({
selector: 'parent1',
providers: [{provide: GeneralService, useExisting: Special1Service}],
template: `<my-component></my-component>`
})
export class Parent1Component {
constructor(private generalService:GeneralService) {}
}
@Component({
selector: 'parent2',
providers: [{provide: GeneralService, useExisting: Special2Service}],
template: `<my-component></my-component>`
})
export class Parent1Component {
constructor(private generalService:GeneralService) {}
}
@NgModule({
providers: [Special1Service, Special2Service]
...
})
export class AppModule {}