鸿蒙API9+axios封装一个通用工具类

这篇具有很好参考价值的文章主要介绍了鸿蒙API9+axios封装一个通用工具类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用方式:
打开Harmony第三方工具仓,找到axios,如图:
鸿蒙axios封装,技术杂谈,harmonyos,华为,鸿蒙,arkts
第三方工具仓网址:https://ohpm.openharmony.cn/#/cn/home
在你的项目执行命令:ohpm install @ohos/axios
前提是你已经装好了ohpm ,如果没有安装,可以在官网找到详细的安装教程;

注意:不是在你的entry目录下,比如你的项目名称:鸿蒙axios封装,技术杂谈,harmonyos,华为,鸿蒙,arkts
在父级目录安装。

接着封装工具类,新建一个ts类:

import axios, { AxiosError, AxiosInstance, AxiosResponse, FormData, InternalAxiosRequestConfig } from '@ohos/axios'
import defaultAppManager from '@ohos.bundle.defaultAppManager';
import ResultData from './ResultData';


class AxiosUtil {
  private instance: AxiosInstance;

  constructor() {
    this.instance = this.getInstance();
    this.addInterceptor(this.instance)
  }

  getInstance(): AxiosInstance {
    const instance = axios.create({
       baseURL: "http://127.0.0.1:10001/jianshen"
    })
    return instance;
  }

  addInterceptor(instance: AxiosInstance): void {
    instance.interceptors.request.use((config: InternalAxiosRequestConfig) => {
      if (config.url.concat('login')) {
      	// 如果是登录路径跳过,其余都需要带上token
        return config;
      } else {
      	// 从全局缓存中取token
        config.headers.set("Authorization", AppStorage.Get("token"))
        return config;
      }
    }, (error: AxiosError) => {
      return Promise.reject(error);
    })

    instance.interceptors.response.use((response: AxiosResponse) => {
      if (response.status == 200) {
        return response.data;
      } else {
        return Promise.reject(response.statusText)
      }
    }, (error: AxiosError) => {
      return Promise.reject(error)
    })
  }

  httpGet(url: string, params: object = {}) {
    return new Promise((resolve, reject) => {
      this.instance.get(url, params)
        .then(response => {
          resolve(response);
        })
        .catch(error => {
          reject(error)
        })
    })
  }

  httpPost(url: string, params: object = {}) {
    return new Promise((resolve, reject) => {
      this.instance.post(url, params)
        .then(response => {
          resolve(response);
        })
        .catch(error => {
          reject(error)
        })
    })
  }

  httpFileUpload(url: string, formData: FormData) {
    return new Promise((resolve, reject) => {
      this.instance.post(url, formData,
        {
          headers: { 'Content-Type': 'multipart/form-data' }
        })
        .then(response => {
          resolve(response);
        })
        .catch(error => {
          reject(error)
        })
    })
  }
}

const axiosUtil: AxiosUtil = new AxiosUtil();

export default axiosUtil;

如何使用?

import axiosUtil from '../../common/AxiosUtil

然后就可以直接在你的arkts代码中使用了;例如:


// @ts-nocheck

import CommonUtil from '../../common/CommonUtil'
import ResultData from '../../common/ResultData'
import axiosUtil from '../../common/AxiosUtil'
import { Banner } from './model/Banner'
import { Teacher } from './model/Teacher'

@Component
@Preview
export default struct ShowYePage {
  @State message: string = '首页'
  private swiperController: SwiperController = new SwiperController();
  @State bannerList: Banner[] = [];
  @State teacherFilterValue: string = ''
  @State teacherList: Teacher[] = [];
  pageIndex: number = 1;
  pageSize: number = 10;
  total: number = 0;

  arr:number[] = [1,2,3,4,5,6,7,8,9,10]

  build() {
    Scroll() {
      Column() {
        Flex({ justifyContent: FlexAlign.Center }) {
          // 上面的搜索栏
          Search({ placeholder: '支持按教练名称/标签进行查询哦~' }).searchButton("搜索").onSubmit(value => {
            this.teacherFilterValue = value;
          })
        }
        .margin({ top: 14 })

        // 轮播图
        Swiper(this.swiperController) {
          if (this.bannerList.length > 0) {
            ForEach(this.bannerList, item => {
              Image(item.img).height(50).width('100%')
            })
          } else {
            Text('占位')
          }
        }
        .cachedCount(2) // 设置预加载子组件个数
        .index(1) // 设置当前在容器中显示的子组件的索引值
        .autoPlay(true) // 子组件是否自动播放
        .interval(4000) // 使用自动播放时播放的时间间隔,单位为毫秒
        .indicator(true) // 是否启用导航点指示器
        .loop(true) //  是否开启循环
        .duration(1000) // 子组件切换的动画时长,单位为毫秒
        .itemSpace(0) // 设置子组件与子组件之间间隙
        .curve(Curve.Linear) // 设置Swiper的动画曲线,默认为淡入淡出曲线
        .borderRadius(15)
        .margin({top:14})
        .height(150)
        .onChange((index: number) => {
          console.info(index.toString())
        })

        // 教练列表
        Column() {
          Flex({justifyContent:FlexAlign.Start}){
            Text('教练列表').fontSize(24).fontWeight(500).padding({left:14})
          }.height(50).width('100%')
          List() {
            ForEach(this.teacherList,(item:Teacher)=>{
              ListItem() {
                TeacherComponent({teacher:item})
              }
            })
          }
          .onReachEnd(()=>{
            console.log('触底了')
          })
          .onReachStart(()=>{
            console.log('上拉了')
          })
          .width('100%')
          .layoutWeight(1)
        }
        .borderRadius({ topLeft: 20, topRight: 20 })
        .margin({ top: 20 })
        .layoutWeight(1)
      }.height('100%').width('100%')
    }.height('100%').width('100%')

    .padding({ left: 14, right: 14 })
  }

  aboutToAppear() {
    this.getBannerList();
    this.getTeacherList();
  }
  // 支持async和await的用法 
  async getBannerList() {
    const result: Banner[] = await axiosUtil.httpPost("banner/list");
    this.bannerList = result;
  }

  async getTeacherList() {
    const params = {
      pageIndex: this.pageIndex,
      pageSize: this.pageSize,
      filterValue: this.teacherFilterValue
    }
    const result = await axiosUtil.httpPost("teacher/list", params);
    const teacherList = result.list;
    this.teacherList = teacherList;
    this.total = result.total;
  }
}


@Component
struct TeacherComponent {

  @State teacher:Teacher = null;


  build() {
    Flex({ justifyContent: FlexAlign.Center }) {
      // 左侧头像
      Flex({ justifyContent: FlexAlign.Start }) {
        Image(this.teacher.avatar).width('100%').height('100%').borderRadius(10)
      }.margin({ top: 5, bottom: 5, right: 5 }).height('95%').width('30%')
      // 右侧描述
      Flex({justifyContent:FlexAlign.Start,direction:FlexDirection.Column}) {
        Text(`教练名称:${this.teacher.username}`).fontSize(24).fontWeight(100).fontStyle(FontStyle.Italic)
        Text(`教练简介:${this.teacher.content}`).fontSize(18).fontWeight(90)
        Text(`标签:${this.teacher.flag}`).fontSize(14)
      }.margin({top:5,bottom:5,right:5}).height('100%').width('70%').onClick(()=>{
        // 跳转教练详情页面 带参数id
        console.log(this.teacher.id)
      })
    }
    .height(150)
    .width('100%')
    .borderRadius(20)
    .margin({bottom:20})
    .backgroundColor(Color.White)
  }
}

到此结束,有任何问题欢迎大佬留言指正文章来源地址https://www.toymoban.com/news/detail-854533.html

到了这里,关于鸿蒙API9+axios封装一个通用工具类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ThinkPHP 通用的API格式封装

    在BaseController中重写__call方法,当调用不存在的方法时,就会调用__call方法,会传入请求方法和参数 在控制器下面新建Error控制器,然后添加__call方法,这样就会调用不存在的控制器的时候会调用__call方法,会传入请求的控制器名称和参数 测试 假定一个成功的请求,测试一下

    2024年02月10日
    浏览(30)
  • 使用ts封装一个Axios请求

    下面是一个简单的 TypeScript 版本的封装 Axios 请求的例子,基于 Axios 0.21.1 版本: 在这个示例中,我们首先定义了一个通用的响应结构 ApiResponse,用来包装 API 返回的数据,包括状态码、数据和消息等信息。然后,我们创建了一个 Axios 实例,定义了请求和响应拦截器,以及封装

    2024年02月16日
    浏览(35)
  • 【vue实战项目】通用管理系统:api封装、404页

    前言 本文为博主的vue实战小项目系列中的第三篇,很适合后端或者才入门的小伙伴看,一个前端项目从0到1的保姆级教学。前面的内容: 【vue实战项目】通用管理系统:登录页-CSDN博客 【vue实战项目】通用管理系统:封装token操作和网络请求-CSDN博客 目录 1.api封装 2.404页面

    2024年02月04日
    浏览(41)
  • 【unity之IMGUI实践】通用API实现抽象行为封装【五】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤 1.添加道具预制体(随机生成武器) 2.封装道具基类 3.封装武器道具逻辑 1.封装道具基类 封装武器道具

    2024年02月15日
    浏览(31)
  • 【Vue项目笔记心得】postman接口测试、axios二次封装、api接口统一管理

    1、postman接口测试 下载地址:Download Postman | Get Started for Free   2、axios二次封装 (1)为什么进行二次封装axios? 请求拦截器、响应拦截器: 请求拦截器 :可以在发请求之前可以处理一些业务 响应拦截器 :当服务器数据返回以后,可以处理一些事情 安装axios: npm install ax

    2023年04月08日
    浏览(35)
  • 前端(二十七)——封装指南:Axios接口、常用功能、Vue和React中的封装技术

    😊博主:小猫娃来啦 😊文章核心: 前端封装指南:Axios接口、常用功能、Vue和React中的封装技术 在我们前端开发当中,封装是种将代码和功能组织起来以便重复使用的方式。它可以使开发人员更高效地编写、维护和管理代码。本文将探讨前端封装的定义、重要性以及在Web开

    2024年02月05日
    浏览(33)
  • axios全局封装取消请求,你可以创建一个 Axios 实例,并为该实例配置默认的 CancelToken

    可以在你的应用中使用这个封装过的 Axios 实例,并通过调用 instance.cancelAll() 方法来取消所有未完成的请求。

    2024年02月04日
    浏览(36)
  • 用PHP封装一个强大且通用的cURL方法

    用PHP封装一个强大且通用的cURL方法。 用PHP封装一个强大且通用的cURL方法。 用PHP封装一个强大且通用的cURL方法。 用PHP封装一个强大且通用的cURL方法。

    2024年02月14日
    浏览(47)
  • Ajax_3 Ajax原理+ (XMLHttpRequest + Promise )+ 封装一个axios插件库,实现功能。

    01-Ajax原理-XMLHttpRequest 使用XMLHttpRequest 步骤: 创建XMLHttpRequest对象 配置请求方法请求url网址 监听loadend事件,接受响应结果 发起请求 需求:使用XMLHttpRequest对象与服务器通信 代码示例 02-XMLHttpRequest-查询参数 定义:浏览器提供给服务器的额外信息,让服务器返回浏览器想要的

    2024年02月14日
    浏览(28)
  • 【HarmonyOS】API9网络buffer图片加载

      【引言】 HarmonyOS中加载网络图片常用的方法是直接给Image组件添加图片的网络地址,申请网络权限ohos.permission.INTERNET后就可以通过url加载对应的图片了,如HarmonyOS官网中的写法: 【问题概述】 但是日常开发中有些图片是存储云服务器中的,下载这些图片需要通过鉴权接口

    2024年02月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包