Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.07.2016, 12:31
Новичок на форуме
Отправить личное сообщение для Grinev Посмотреть профиль Найти все сообщения от Grinev
 
Регистрация: 06.07.2016
Сообщений: 1

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> и т.д.

Каким образом это можно организовать?

Спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Настройка компиляции TypeScript ruslan_mart Общие вопросы Javascript 4 30.05.2016 21:29
TypeScript vs ES6 caetus Общие вопросы Javascript 17 18.03.2016 12:37
TypeScript for Large App Angularjs kodermax Angular.js 1 25.03.2015 22:58
Как бы скоро не пришлось писать на Dart, TypeScript ... Gozar Оффтопик 93 21.03.2014 15:46
Typescript vs Dart x-yuri Оффтопик 91 15.10.2012 00:32