Я знаю, что могу составлять компонент и службу в Angular 2 (Typcript) и анализировать ответ в компоненте, но я хочу, чтобы моя архитектура была как внизу, так как для любых изменений в ответе мне придется менять только мой парсер :Можно ли создать класс Parser в Angular2 (Typcript) для обработки ответа?
Сервис: Выполнение вызова вызова API и выборки. Имеет метод получения ответа.
Parser: возвращает ответ и обрабатывает ответ и возвращает ответ в полезной форме компоненту.
Компонент: получает ответ от анализатора и отображает данные для просмотра.
Для этого я пользуюсь наблюдаемым из службы и подписываю его на парсер. А затем с помощью наблюдаемого от парсера и подписывающего его в компоненте.
Но при этом возникает много ошибок при этом. Могу ли я пропустить какие-либо шаги или это правильный подход к проблеме.
Добавление Код:
Компонент :::
Услуги :::
import { Observable } from 'rxjs/Observable';
import { IRequest } from './api.interaction.interface';
import { Http, Headers, RequestOptions, Response } from '@angular/http';
import { Injectable } from '@angular/core';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';
@Injectable()
export class ApiInteractionService {
// Constructor Function
constructor(private _http: Http) {
}
getApiResponse(p_attr: IRequest): Observable<Response> {
// Set request url
let _authenticationUrl: string = p_attr.url;
// Set request body
let _body: any = p_attr.body;
// Set content type to JSON
let _headers = new Headers(p_attr.header);
// Set a request option
let _options = new RequestOptions({ headers: _headers });
return this._http[p_attr.method](_authenticationUrl, _body, _options)
.map((response: Response) => response.json()) ///... change response to JSON format
.do((data:any) => console.log('All : ' + JSON.stringify(data))) //... console response
.catch((error: any) => Observable.throw(error.json().error || 'Server error')); //...errors if any
}}
PARSER :::
import { Injectable, Component } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { IRequest } from './../services/api.interaction.interface';
import { ApiInteractionService } from './../services/api.interaction.service';
@Injectable()
export class AuthenticateParser {
private _authenticationToken: string = '';
// Constructor Function
constructor(private _authenticationService: ApiInteractionService) {
}
// Fetches Authentication Token
setAuthenticationToken(): void {
let p_url: string = 'http://10.5.214.82:8443/auth/authenticate';
let p_body: Object = {
"userId": "admin",
"password": "admin"
};
let p_header: Object = {
"Content-Type": "application/json"
};
let p_attrs: IRequest = {
'method': 'post',
'url': p_url,
'body': p_body,
'header': p_header
};
this._authenticationService.getApiResponse(p_attrs)
.subscribe(
response => this.parseSuccessResponse(response),
error => this.parseErrorResponse(error)
);
}
// Parses Token response and sets it.
parseSuccessResponse(p_response: any): void {
this._authenticationToken = p_response.data;
}
// Parses Error response and sets it.
parseErrorResponse(p_error: any): void {
this._authenticationToken = p_error.data;
}
// returns authentication token
getAuthenticationToken():string {
return this._authenticationToken;
}
}
это дает мне не ошибку Нет поставщика для YourService! –
Серьезно ?! YourService - это место, где вы импортируете свою услугу, где у вас возникли вызовы API. Это код руководства, то же самое относится к yourGetFunction(), вы заменяете его функцией get в вашей службе api – kwalski
Добавленный код; если вы можете проверить –