Angular2 и Typescript
Добрый день!
Нужна помощь, есть у меня вот такой вот сервис: import { Injectable } from '@angular/core'; import { Http, Response } from '@angular/http'; import { Observable } from 'rxjs/Observable'; import { ResourceSettingType } from './type'; @Injectable() export class ResourceSettingTypeService { constructor (private http: Http) { } public url = '/backend/resource/setting/types'; all(): Observable<ResourceSettingType[]> { return this.http.get(this.url) .map(this.extractData) .catch(this.handleError); } find(id: number): Observable<ResourceSettingType> { return this.http.get(this.url + '/' + id) .map(this.extractData) .catch(this.handleError); } delete(id: number): Observable<ResourceSettingType> { return this.http.delete(this.url + '/' + id) .map(this.extractData) .catch(this.handleError); } private extractData(res: Response) { let body = res.json(); return body.data || { }; } private handleError (error: any) { let errMsg = (error.message) ? error.message : error.status ? `${error.status} - ${error.statusText}` : 'Server error'; console.error(errMsg); // log to console instead return Observable.throw(errMsg); } } Это все базовые CRUD операции и таких сервисов много, хочу это вынести в какой нибудь базовый сервис класс import { Http, Response } from '@angular/http'; import { Observable } from 'rxjs/Observable'; import { ResourceSettingType } from './../../resource/setting/type/type'; export abstract class BaseService { public http; public url; all(): Observable<ResourceSettingType[]> { return this.http.get(this.url) .map(this.extractData) .catch(this.handleError); } find(id: number): Observable<ResourceSettingType> { return this.http.get(this.url + '/' + id) .map(this.extractData) .catch(this.handleError); } delete(id: number): Observable<ResourceSettingType> { return this.http.delete(this.url + '/' + id) .map(this.extractData) .catch(this.handleError); } private extractData(res: Response) { let body = res.json(); return body.data || { }; } private handleError (error: any) { let errMsg = (error.message) ? error.message : error.status ? `${error.status} - ${error.statusText}` : 'Server error'; console.error(errMsg); // log to console instead return Observable.throw(errMsg); } } И использовать таким вот образом import { Injectable } from '@angular/core'; import { Http, Response } from '@angular/http'; import { BaseService } from './../../../common/components/base-service'; @Injectable() export class ResourceSettingTypeService extends BaseService { public url = '/backend/resource/setting/types'; constructor (private http: Http) { super(); } } Но каким образом сделать Observable не могу понять, потому что для каждого сервиса свои Observable<ResourceSettingType> и т.д. Каким образом это можно организовать? Спасибо! |
Часовой пояс GMT +3, время: 19:18. |