文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

angular8封装http服务的方法

2023-06-09 09:41

关注

这篇文章将为大家详细讲解有关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]})export class AppModule { }

封装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'})export class HttpService {  private http: any;  constructor(private Http: HttpClient) {    this.http = Http;  }  // get方法  public get(url: string, options?: Object, params?: Object): Observable<{}> {    let httpParams = new HttpParams();    if (params) {      for (const key in params) {        if (params[key] === false || params[key]) {          httpParams = httpParams.set(key, params[key]);        }      }    }    return this.http.get(url, { headers: options, params: httpParams }).pipe(catchError(this.handleError));  }    // post方法  public post(url: string, body: any = null, options?: Object): Observable<{}> {    return this.http.post(url, body, options).pipe(catchError(this.handleError));  }  // post表单  public postForm(url: string, body: any = null, options?: Object): Observable<{}> {    let httpParams = new HttpParams();    if (body) {      for (const key in body) {        if (body[key] === false || body[key]) {          httpParams = httpParams.set(key, body[key]);        }      }    }    return this.http.post(url, httpParams, options).pipe(catchError(this.handleError));  }    private handleError(error: HttpErrorResponse) {    if (error.error instanceof ErrorEvent) {      console.error('An error occurred:', error.error.message);    } else {      console.error(        `Backend returned code ${error.status}, ` +        `body was: ${error.error}`);    }    console.log(error);    return throwError(error.error);  }}

这里贴上get、post两种的方式的例子,其他如delete这些就不展示了,一样的原理。

细节

稍微说一下里面的细节:

return this.http.post(url, httpParams, options).pipe(catchError(this.handleError));

这里返回的是Observable<{}> ,并通过pipe管道处理请求异常,异常的处理在最下面的handleError 方法里。

使用

// 引入封装好的http服务constructor(private http: HttpService) { }public testGet(url: string, successCallback?: Function, failCallback?: Function) {  const httpOptions = {    headers: new HttpHeaders({      '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服务的方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯