问题描述
此自动生成的服务(由NSwagStudio提供)需要API_BASE_URL(InjectionToken)值才能执行http请求我可以在哪里注射?
this autogenerated service (by NSwagStudio) needs an API_BASE_URL (InjectionToken) value in order to perform http requestshow 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(字符串)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!