在组件中使用动态服务

时间:2019-07-25 07:56:19

标签: angular angular8

我需要在两个不同的模块中使用组件,该组件正在使用具有一定状态的服务。该组件还具有使用相同服务的子组件。我需要服务的两个实例,因为我不希望模块1中的组件中的操作影响模块2中的服务状态。 我当前的解决方案是将服务注入组件装饰器中,并将服务范围扩展到组件实例。并且我将此特定实例作为@input字段传递给子组件。

有更好的解决方案吗?

3 个答案:

答案 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)

很少建议

  1. 服务并非旨在存储数据。
  2. 保持服务清洁,分类并进行常见操作。
  3. 如果您想要基于不同组件的不同数据,请使用一些参数来确定。

在您的情况下,您希望根据组件获得不同的搜索结果,因此您可以创建一个通用服务,该服务可以接受一些参数并获取结果。

All the best