如何在角度服务中注入API_BASE_URL(字符串) [英] how to inject API_BASE_URL (a string) in an angular service
问题描述
此自动生成的服务(由NSwagStudio提供)需要API_BASE_URL(InjectionToken)值才能执行http请求 我可以在哪里注射?
this autogenerated service (by NSwagStudio) needs an API_BASE_URL (InjectionToken) value in order to perform http requests how and where i can inject it?
/* tslint:disable */
//----------------------
// <auto-generated>
// Generated using the NSwag toolchain v11.12.16.0 (NJsonSchema v9.10.19.0 (Newtonsoft.Json v9.0.0.0)) (http://NSwag.org)
// </auto-generated>
//----------------------
// ReSharper disable InconsistentNaming
import 'rxjs/add/observable/fromPromise';
import 'rxjs/add/observable/of';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/operator/catch';
import { Observable } from 'rxjs/Observable';
import { Injectable, Inject, Optional, InjectionToken } from '@angular/core';
import { HttpClient, HttpHeaders, HttpParams, HttpResponse, HttpResponseBase, HttpErrorResponse } from '@angular/common/http';
export const API_BASE_URL = new InjectionToken<string>('API_BASE_URL');
@Injectable()
export class DocumentService {
private http: HttpClient;
private baseUrl: string;
protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;
constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(API_BASE_URL) baseUrl?: string) {
this.http = http;
this.baseUrl = baseUrl ? baseUrl : "";
}
getAll(): Observable<string[] | null> {
let url_ = this.baseUrl + "/api/Document";
url_ = url_.replace(/[?&]$/, "");
let options_ : any = {
observe: "response",
responseType: "blob",
headers: new HttpHeaders({
"Content-Type": "application/json",
"Accept": "application/json"
})
};
return this.http.request("get", url_, options_).flatMap((response_ : any) => {
return this.processGetAll(response_);
}).catch((response_: any) => {
if (response_ instanceof HttpResponseBase) {
try {
return this.processGetAll(<any>response_);
} catch (e) {
return <Observable<string[] | null>><any>Observable.throw(e);
}
} else
return <Observable<string[] | null>><any>Observable.throw(response_);
});
}
protected processGetAll(response: HttpResponseBase): Observable<string[] | null> {
...........code
........
....
}
}
有人可以给我一些有关InjectioToken的工作原理以及如何将其注入此服务的快速提示吗?
may someone give me some super quick tips about how InjectioToken works and how inject it into this service?
Angular5-Nswag
Angular5 - Nswag
推荐答案
在父模块上,创建API_BASE_URL的提供程序
On the parent module create a provider for API_BASE_URL
export function getBaseUrl(): string {
return AppConsts.baseUrl;
}
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
providers: [{ provide: API_BASE_URL, useFactory: getBaseUrl }],
bootstrap: [AppComponent]
})
export class AppModule {}
,然后定义具有此类静态属性的AppConsts类
and then define a AppConsts class with static properties as such
export class AppConsts {
static baseUrl = "your_api_base_url";
}
为我工作,希望对您有所帮助.该解决方案基于aspnet样例项目,对我而言,该项目提供了最佳的体系结构标准. 我在这里将角度项目 +的网址留给您此特定代码的URL .
Worked for me, hope it help. This solution is based on aspnet boilerpate angular project, which for me give the best standards on architecture. I leave you here the url for the angular project + the url for this specific code.
这篇关于如何在角度服务中注入API_BASE_URL(字符串)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!