我需要在两个不同的模块中使用组件,该组件正在使用具有一定状态的服务。该组件还具有使用相同服务的子组件。我需要服务的两个实例,因为我不希望模块1中的组件中的操作影响模块2中的服务状态。
我当前的解决方案是将服务注入组件装饰器中,并将服务范围扩展到组件实例。并且我将此特定实例作为@input
字段传递给子组件。
有更好的解决方案吗?
答案 0 :(得分:0)
我假设您正在寻找的是非单一服务。将您的服务添加到providers
的{{1}}中可以使该服务成为单例服务,这意味着将仅创建该服务的一个实例,该实例将与您的应用程序一样有效。您可以改为在组件中添加服务,使其成为非单一服务。
app.module.ts
这样,当Angular销毁组件时,它也会销毁服务。非单例服务也具有@Component({
selector: 'app-home',
providers: [SearchService]
})
生命周期挂钩,因此请确保取消订阅,以避免内存泄漏。
答案 1 :(得分:0)
我将创建一个抽象类并将其扩展到组件中,您将为每个页面创建新的comps。
export abstract class Base{
constructor(protected service:any){}
}
export class Comp1 extends Base{
constructor(protected service: Service1){
super(service);
}
}
export class Comp2 extends Base{
constructor(protected service: Service2){
super(service);
}
}
这样,您只需要编写一次代码,就可以灵活地覆盖所有内容。
答案 2 :(得分:0)
很少建议
在您的情况下,您希望根据组件获得不同的搜索结果,因此您可以创建一个通用服务,该服务可以接受一些参数并获取结果。
All the best