tnblog
首页
视频
资源
登录
不帅~~但是很暖心.....
排名
14
文章
75
粉丝
21
评论
43
申请别的接口数据(网络接口)
是伍尚金哇 : 敲一夜代码,流下两三行泪水,掏空四肢五体,六杯白开水七桶泡面
mui框架-移动端跳转以及传值的简单方法(修改解决方法)
是伍尚金哇 : 测试了 可以直接在 extras: { userid:'10' //自定义扩展...
数据库的varchar和nvarchar的区别
是伍尚金哇 : 没人看 自己看一个 温习一下
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

基于angular的HttpClient封装_HttpClient

7040人阅读 2020/12/23 14:06 总访问:372844 评论:0 收藏:0 手机
分类: Angular


基于angular的HttpClient封装_HttpClient,直接复制源码即可用
包含常用的get、post、patch、delete和put请求;

import { HttpClientHttpEventHttpHeadersHttpResponse } from "@angular/common/http";
import { Injectable } from "@angular/core";
import { ObservableofthrowError } from 'rxjs';
import { catchErrorswitchMaptap } from 'rxjs/operators';

export type _HttpHeaders = HttpHeaders | { [headerstring]: string | string[] };

/**
 * 封装HttpClient,主要解决:
 * + 优化HttpClient在参数上便利性
 * + 统一实现 loading
 */
@Injectable({ providedIn: 'root' })
export class _HttpClient {
    constructor(private httpHttpClient) {
    }

    private _loading = false;

    /** 是否正在加载中 */
    get loading(): boolean {
        return this._loading;
    }

    private begin(): void {
        Promise.resolve(null).then(() => (this._loading = true));
    }

    private end(): void {
        Promise.resolve(null).then(() => (this._loading = false));
    }

    /**
     * GET:返回一个 `any` 类型
     */
    get(
        urlstring,
        params?: any,
        options?: {
            headers?: _HttpHeaders;
            observe?: 'body';
            reportProgress?: boolean;
            responseType'arraybuffer';
            withCredentials?: boolean;
        },
    ): Observable<any> {
        this.begin();
        return of(null).pipe(
            tap(() => this.begin()),
            switchMap(() => this.http.get(urloptions)),
            tap(() => this.end()),
            catchError(res => {
                this.end();
                return throwError(res);
            }),
        );
    }

    /**
   * POST:返回一个 `any` 类型
   */
    post(
        urlstring,
        body?: any,
        params?: any,
        options?: {
            headers?: _HttpHeaders;
            observe?: 'body';
            reportProgress?: boolean;
            responseType?: 'json';
            withCredentials?: boolean;
        },
    ): Observable<any> {
        this.begin();
        return of(null).pipe(
            tap(() => this.begin()),
            switchMap(() => this.http.get(urloptions)),
            tap(() => this.end()),
            catchError(res => {
                this.end();
                return throwError(res);
            }),
        );
    }

    /**
   * DELETE:返回一个 `any` 类型
   */
    delete(
        urlstring,
        params?: any,
        options?: {
            headers?: _HttpHeaders;
            observe?: 'body';
            reportProgress?: boolean;
            responseType?: 'json';
            withCredentials?: boolean;
        },
    ): Observable<any> {
        this.begin();
        return of(null).pipe(
            tap(() => this.begin()),
            switchMap(() => this.http.get(urloptions)),
            tap(() => this.end()),
            catchError(res => {
                this.end();
                return throwError(res);
            }),
        );
    }

    /**
   * PATCH:返回一个 `any` 类型
   */
    patch(
        urlstring,
        body?: any,
        params?: any,
        options?: {
            headers?: _HttpHeaders;
            observe?: 'body';
            reportProgress?: boolean;
            responseType?: 'json';
            withCredentials?: boolean;
        },
    ): Observable<any> {
        this.begin();
        return of(null).pipe(
            tap(() => this.begin()),
            switchMap(() => this.http.get(urloptions)),
            tap(() => this.end()),
            catchError(res => {
                this.end();
                return throwError(res);
            }),
        );
    }

    /**
   * PUT:返回一个 `any` 类型
   */
    put(
        urlstring,
        body?: any,
        params?: any,
        options?: {
            headers?: _HttpHeaders;
            observe?: 'body';
            reportProgress?: boolean;
            responseType?: 'json';
            withCredentials?: boolean;
        },
    ): Observable<any> {
        this.begin();
        return of(null).pipe(
            tap(() => this.begin()),
            switchMap(() => this.http.get(urloptions)),
            tap(() => this.end()),
            catchError(res => {
                this.end();
                return throwError(res);
            }),
        );
    }

}


评价

基于office 把wordwordxpptpptxxlsxlsx转为pdf在线预览

//,要在服务器安装office,需要引用usingMicrosoft.Office.Interop.Word;usingMicrosoft.Office.Interop.PowerPoint;usingMi...

基于open office 把各种类型转为pdf在线预览

//需要在服务器安装openoffice,引用cli_basetypes,cli_cppuhelper,cli_oootypes,cli_ure,cli_uretypes publicboolCon...

基于接口Sort排序方法原理

集合提供了Sort,我们可以实现IComparer接口,来实现自定义的对象排序方法:例如:根据年龄来排序publicclassMySort:ICompa...

Elasticsearch 基于词项和基于全文搜索

Elasticsearch 基于词项和基于全文的搜索[TOC] 基于 Term 的查询Term 的重要性Term 是表达语意的最小单位。搜索和利用语言...

Centos7安装k8s(基于kubeadm)

Centos7安装k8s(基于kubeadm)[TOC] 下载相关包 链接:https://pan.baidu.com/s/1H9MuZsf28f_3uyVHBUS8jQ提取码:w9tv ...

.net core调用基于GPT-3.5ChatGPT接口

基于GPT-3.5的接口OpenAI 已经开放和官网版本的ChatGPT相同的模型 gpt-3.5-turbo GPT-3.5和3.0调用方式几乎一样,修改一下...

Pytorch 基于经典网络架构训练图像分类模型

Pytorch 基于经典网络架构训练图像分类模型[TOC] 数据预处理部分:数据增强:torchvision中transforms模块自带功能,比较...

基于Ollama创建Gemma定制化AI模型

基于Ollama创建Gemma定制化AI模型[TOC] 什么是Gemma?Gemma模型使用了和Gemini同源的技术,总共有20亿参数和70亿参数两种...

angular使用组件时遇到一些错误整理

先看看代码exportclassSidenavComponentimplementsOnInit{ privatemediaMatcher:MediaQueryList=matchMedia(`(max-width...

angular使用第三方资源(举例面向插件)

问题Example :我们需要一张svg到页面中1.把图片放在assets文件夹下面以move.svg为例2.需要对单个资源进行模板注册import{C...

angular使用Proxy

Multiple entriesIf you need to proxy multiple entries to the same target define the configuration inproxy.conf.jsin...

angular路由导航配置

开发工具:VSCode打开终端输入命令创建crisis-list和hero-list组件nggeneratecomponentcrisis-listnggeneratecomponenthero...

angular环境搭建

开发工具:vscode命令执行:快捷键( Ctrl+Shift+` )或者打开终端近期一直写有关前端的东西,其实我是学后端C#.NET的,但是在...

angular常用创建命令

Angular开发在Angular开发中常见的一些命令创建命令ng generate component example 生成组件带有模版ng generate component...

关于angular常用创建命令。

在Angular开发中常见的一些命令创建命令ng generate component example生成组件带有模版ng generate component example -it...
我也想杀死伤痛,让那恩怨有始有终。