एक दिशा हम अपनी टीम पर इस आ गया है एक API ग्राहक वर्ग को लागू करने से है। यह एपीआई क्लाइंट मूल एचटीपी सेवा लपेटता है।
विचार यह है कि जब से Http सेवा observables पैदा करता है आप आसानी से अपने व्यवहार को जोड़ने ऑपरेटरों द्वारा मूल नमूदार Http सेवा द्वारा उत्पादित करने के लिए map
, flatMap
और catch
ऑपरेटरों की तरह का विस्तार कर सकते है।
मुझे लगता है कि आपको यह समस्या आपके पास होने वाली समस्या को ठीक करने के लिए एक उपयोगी प्रारंभिक बिंदु मिलेगी।
import { ApiRequestOptions } from './api-request-options.service';
import { Http, Response, RequestOptions, ResponseContentType } from '@angular/http';
import 'rxjs/add/observable/zip';
import 'rxjs/add/operator/map';
import { Observable } from 'rxjs/Rx';
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
@Injectable()
export class ApiClient {
// PLease note, the API request options service is a helper that we introduced
// to generate absolute URLs based on settings in the client.
// I did not include it here for brevity.
constructor(private router: Router, private http: Http, private requestOptions: ApiRequestOptions) {
}
get<TResponse>(path: string, queryStringParams?: any): Observable<TResponse> {
let self = this;
return Observable.zip(
this.requestOptions.absoluteUrlFor(path, queryStringParams),
this.requestOptions.authorizedRequestOptions()
).flatMap(requestOpts => {
let [url, options] = requestOpts;
return self.http.get(url, options);
}).catch(response => {
if (response.status === 401) {
self.router.navigate(['/login']);
}
return response;
}).map((response: Response) => <TResponse>response.json());
}
post<TResponse>(path: string, body: any): Observable<TResponse> {
let self = this;
return Observable.zip(
this.requestOptions.absoluteUrlFor(path),
this.requestOptions.authorizedRequestOptions()
).flatMap(requestOpts => {
let [url, options] = requestOpts;
return self.http.post(url, body, options);
}).catch(response => {
if (response.status === 401) {
self.router.navigate(['/login']);
}
return response;
}).map((response: Response) => <TResponse>response.json());
}
put<TResponse>(path: string, body: any): Observable<TResponse> {
let self = this;
return Observable.zip(
this.requestOptions.absoluteUrlFor(path),
this.requestOptions.authorizedRequestOptions()
).flatMap(requestOpts => {
let [url, options] = requestOpts;
return self.http.put(url, body, options);
}).catch(response => {
if (response.status === 401) {
self.router.navigate(['/login']);
}
return response;
}).map((response: Response) => {
if (response.status === 200) {
return <TResponse>response.json();
} else {
return null;
}
});
}
delete(path: string): Observable<Response> {
let self = this;
return Observable.zip(
this.requestOptions.absoluteUrlFor(path),
this.requestOptions.authorizedRequestOptions()
).flatMap(requestOpts => {
let [url, options] = requestOpts;
return self.http.delete(url, options);
}).catch(response => {
if (response.status === 401) {
self.router.navigate(['/login']);
}
return response;
});
}
}
स्रोत
2017-01-10 11:56:10
देखें http://stackoverflow.com/questions/36599523/angular-2-route-to-404-page-when-route-param-is-invalid/36609006#36609006 –
@ GünterZöchbauer यह नहीं करता है सेवा में राउटर का उपयोग करने के बारे में मेरे प्रश्न पर उत्तर दें – Viktor
यकीन नहीं क्यों। यदि आप राउटर 'कंस्ट्रक्टर (निजी http: एचटीपी, निजी राउटर: राउटर) {}' इंजेक्ट करते हैं तो आप इसका उपयोग करने में सक्षम होना चाहिए। प्रश्न के नीचे लिंक भी देखें। –