angular8封装http服务的方法
这篇文章将为大家详细讲解有关angular8封装http服务的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
HttpClientModule
要在angular里使用http服务必须先在
app.module.ts里导入HttpClientModule模块,不然会报错。
import{NgModule}from'@angular/core';
import{BrowserModule}from'@angular/platform-browser';
import{RouteReuseStrategy}from'@angular/router';
//导入关键模块
import{HttpClientModule}from'@angular/common/http';
import{IonicModule,IonicRouteStrategy}from'@ionic/angular';
import{SplashScreen}from'@ionic-native/splash-screen/ngx';
import{StatusBar}from'@ionic-native/status-bar/ngx';
import{AppRoutingModule}from'./app-routing.module';
import{AppComponent}from'./app.component';
@NgModule({
declarations:[AppComponent],
entryComponents:[],
imports:[BrowserModule,IonicModule.forRoot(),AppRoutingModule,HttpClientModule],
providers:[
StatusBar,
SplashScreen,
{provide:RouteReuseStrategy,useClass:IonicRouteStrategy}
],
bootstrap:[AppComponent]
})
exportclassAppModule{}封装http
根据angular的官网,请求返回的是数据的
Observable对象,所以组件要订阅(subscribe) 该方法的返回值。
import{Injectable}from'@angular/core';
import{HttpClient,HttpParams,HttpErrorResponse}from'@angular/common/http';
import{Observable,throwError}from'rxjs';
import{catchError}from'rxjs/operators';
@Injectable({
providedIn:'root'
})
exportclassHttpService{
privatehttp:any;
constructor(privateHttp:HttpClient){
this.http=Http;
}
//get方法
publicget(url:string,options?:Object,params?:Object):Observable<{}>{
lethttpParams=newHttpParams();
if(params){
for(constkeyinparams){
if(params[key]===false||params[key]){
httpParams=httpParams.set(key,params[key]);
}
}
}
returnthis.http.get(url,{headers:options,params:httpParams}).pipe(catchError(this.handleError));
}
//post方法
publicpost(url:string,body:any=null,options?:Object):Observable<{}>{
returnthis.http.post(url,body,options).pipe(catchError(this.handleError));
}
//post表单
publicpostForm(url:string,body:any=null,options?:Object):Observable<{}>{
lethttpParams=newHttpParams();
if(body){
for(constkeyinbody){
if(body[key]===false||body[key]){
httpParams=httpParams.set(key,body[key]);
}
}
}
returnthis.http.post(url,httpParams,options).pipe(catchError(this.handleError));
}
/**
*处理请求失败的错误
*@paramerrorHttpErrorResponse
*/
privatehandleError(error:HttpErrorResponse){
if(error.errorinstanceofErrorEvent){
console.error('Anerroroccurred:',error.error.message);
}else{
console.error(
`Backendreturnedcode${error.status},`+
`bodywas:${error.error}`);
}
console.log(error);
returnthrowError(error.error);
}
}这里贴上get、post两种的方式的例子,其他如delete这些就不展示了,一样的原理。
细节
稍微说一下里面的细节:
return this.http.post(url, httpParams, options).pipe(catchError(this.handleError));
这里返回的是Observable<{}> ,并通过pipe管道处理请求异常,异常的处理在最下面的handleError 方法里。
使用
//引入封装好的http服务
constructor(privatehttp:HttpService){}
/**
*测试get方法
*@paramsuccessCallback成功的回调
*@paramfailCallback失败的回调
*/
publictestGet(url:string,successCallback?:Function,failCallback?:Function){
consthttpOptions={
headers:newHttpHeaders({
'Content-Type':'application/json;charset=UTF-8'
})
};
this.http.get(url,httpOptions.headers).subscribe(
(res:any)=>{
successCallback(res);//成功走sucessCallback
},(err:HttpErrorResponse)=>{
failCallback(err);//失败
}
);
}这是一个具体的get请求service,testGet定义里三个参数,一个是请求地址,还有成功的回调与失败的回掉。 subscribe订阅observable 对象。
在component里使用
this.testService.testGet('url', (res:any) => {}, (err:any) =>{});
关于“angular8封装http服务的方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
推荐阅读
-
Git 提交规范:Angular Commit Message 格式与团队实践
-
Angular生命周期执行的顺序是什么
Angular生命周期执行的顺序是什么这篇文章主要介绍“Angul...
-
Angular怎么利用service实现自定义服务
Angular怎么利用service实现自定义服务这篇文章主要介绍...
-
Angular依赖注入体系中的基本概念是什么
Angular依赖注入体系中的基本概念是什么这篇文章主要介绍“An...
-
Angular8基础知识点有哪些
Angular8基础知识点有哪些这篇文章给大家分享的是有关Angu...
-
angular双向绑定的示例分析
angular双向绑定的示例分析这篇文章主要为大家展示了“angu...
-
angular父子组件通信的示例分析
angular父子组件通信的示例分析这篇文章主要介绍angular...
-
angular中怎么使用echarts地图
angular中怎么使用echarts地图这篇文章将为大家详细讲解...
-
Angular如何实现搜索、过滤、批量删除、添加、表单验证功能
这篇文章将为大家详细讲解有关Angular如何实现搜索、过滤、批量删除、添加、表单验证功能,小编觉得挺实用的,因此分享给大家做个参...
-
Angular如何实现搜索框
这篇文章主要介绍Angular如何实现搜索框,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.要求:利用...
