【问题标题】:Inheritance vs Injection in use of Angular 4 service使用 Angular 4 服务的继承与注入
【发布时间】:2018-08-30 07:10:57
【问题描述】:

我对 Angular 的世界有点陌生。我目前正在使用 Angular-4.4.6。 我的场景如下: 我有 3 个组件(例如 C1、C2、C3),每个组件都使用自己的服务(例如 S1、S2、S3 等),然后调用“http.get()”从 rest 后端获取数据。 我想知道的是不是在三个服务中的每一个中注入“http:HttpClient”,我是否应该创建一个“RestService”类,该类具有所有其他调用,如 get()、post()、put()、 delete() 然后:

  • 将此基类扩展到我将在其中的 3 个服务中的每一个 订阅基类的这些方法调用,然后使用数据 取到了吗?

  • 将具有通用方法的“RestService”注入我的每个服务的构造函数中,然后通过订阅这些服务来使用它们?

这两种方法是否会影响性能?

【问题讨论】:

  • 你为什么不想这样做? HttpClient 已经是你的 RestService 所以你应该把它注入你的每一个服务中。
  • 我通常只使用一个“RestService”,直接来自组件。这更有意义,因为组件本身可以处理错误或成功处理。这样您就可以保留 S1、S2 等服务,但任何后端通信都用于不同的服务。如果您继承了返回 observable / promises 的方法,那么无论如何您都可以从中间服务中传递它们。回答您的问题:我认为后者更好,您使用单个通信端点并以不同方式参数化它们 - 但我不知道任何性能差异。

标签: angular typescript


【解决方案1】:

我喜欢有一个“基础服务”

export class ServiceModel<T>{
    type: string;
    url: string;
    ...
    constructor(private _http: HttpClient) {
    }
    list(): Observable<T[]> {
        return this._http.get<T[]>(this.url)
    }
    ...
}

然后在data1Service中

export interface IData1
{
    id:number;
    desc:string;
    ...
}

@Injectable()
export class Data1Service extends ServiceModel<IData1> {
    type:string="data1";
    url:string="myurl/data1";

    constructor(http: HttpClient) {
        super(http)
    }
}

但我不知道这个答案是否能解决你的问题:(

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    相关资源
    最近更新 更多