赞
踩
使用方式:
打开Harmony第三方工具仓,找到axios,如图:
第三方工具仓网址:https://ohpm.openharmony.cn/#/cn/home
在你的项目执行命令:ohpm install @ohos/axios
前提是你已经装好了ohpm ,如果没有安装,可以在官网找到详细的安装教程;
注意:不是在你的entry目录下,比如你的项目名称:
在父级目录安装。
接着封装工具类,新建一个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) } }
到此结束,有任何问题欢迎大佬留言指正
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。