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服务的方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
推荐阅读
-
Angular生命周期执行的顺序是什么
-
Angular怎么利用service实现自定义服务
-
Angular依赖注入体系中的基本概念是什么
-
Angular8基础知识点有哪些
Angular8基础知识点有哪些这篇文章给大家分享的是有关Angu...
-
angular双向绑定的示例分析
-
angular父子组件通信的示例分析
-
angular中怎么使用echarts地图
angular中怎么使用echarts地图这篇文章将为大家详细讲解...
-
Angular如何实现搜索、过滤、批量删除、添加、表单验证功能
这篇文章将为大家详细讲解有关Angular如何实现搜索、过滤、批量删除、添加、表单验证功能,小编觉得挺实用的,因此分享给大家做个参...
-
Angular如何实现搜索框
这篇文章主要介绍Angular如何实现搜索框,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.要求:利用...
-
angular7中引用ng zorro antd的方法