三.UniApp入门教程- Api请求和封装

本篇在《UniApp入门教程- 项目创建》基础上,对首页信息数据进行动态绑定,封装了http请求并对请求API进行集中管理
 
使用uView的Api请求工具 https://v1.uviewui.com/js/http.html
该插件适用于一般的请求场景,只支持post,get,put,delete请求,不适用于上传下载,插件定位小而美,而不是大而全
 
首先在项目中创建文件夹“common”,新建两个文件“http.api.js”,"http.interception.js"
其中http.api.js用来封装常用的请求地址,http.interceptor.js 配置文件和拦截器相关代码
http.api.js:
let indexUrl = '/api/index';
const install = (Vue, vm) => {
    // 此处没有使用传入的params参数
    let index = (params = {}) => vm.$u.get(indexUrl ); 
    vm.$u.api = {
        index
    };
    //或者写成
    //vm.$u.api={}
    //vm.$u.api.authIndex=params=>vm.$u.post('/api/auth/login',params)
}
export default {
    install
} 

http.interceptor.js:

 1 const install = (Vue, vm) => {
 2     // 此为自定义配置参数,具体参数见上方说明
 3     Vue.prototype.$u.http.setConfig({
 4          
 5         baseUrl: 'http://localhost:5030', // 请求的本域名
 6         method: 'POST',
 7         // 设置为json,返回后会对数据进行一次JSON.parse()
 8         dataType: 'json',
 9         showLoading: true, // 是否显示请求中的loading
10         loadingText: '请求中...', // 请求loading中的文字提示
11         loadingTime: 800, // 在此时间内,请求还没回来的话,就显示加载中动画,单位ms
12         originalData: false, // 是否在拦截器中返回服务端的原始数据
13         loadingMask: true, // 展示loading的时候,是否给一个透明的蒙层,防止触摸穿透
14         // 配置请求头信息
15         header: {
16             'content-type': 'application/json;charset=UTF-8'
17         },
18     });
19 
20     // 请求拦截部分,如配置,每次请求前都会执行,见上方说明
21     Vue.prototype.$u.http.interceptor.request = (config) => {
22         // ......
23         return config;
24     }
25 
26     // 响应拦截,如配置,每次请求结束都会执行本方法
27     Vue.prototype.$u.http.interceptor.response = (res) => {
28         console.log(res);
29         return res;
30         if (res.code == 200) {
31             // res为服务端返回值,可能有code,result等字段
32             // 这里对res.result进行返回,将会在this.$u.post(url).then(res => {})的then回调中的res的到
33             // 如果配置了originalData为true,请留意这里的返回值
34             return res.result;
35         }  else {
36             // 如果返回false,则会调用Promise的reject回调,
37             // 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中,res为服务端的返回值
38             return false;
39         } 
40     }
41 }
42 
43 export default {
44     install
45 }
main.js 配置:
1 // http接口API集中管理引入部分
2 import httpApi from '@/common/http.api.js'
3 Vue.use(httpApi, app)
4 
5 // http拦截器,此为需要加入的内容,如果不是写在common目录,请自行修改引入路径
6 import httpInterceptor from '@/common/http.interceptor.js'
7 // 这里需要写在最后,是为了等Vue创建对象完成,引入"app"对象(也即页面的"this"实例)
8 Vue.use(httpInterceptor, app)

 

在上一篇《UniApp入门教程- 项目创建》中,修改首页中的行业咨询,使得数据动态绑定
在本地运行接口项目,这里以.net core api为例
 
在http.api.js中添加请求Url:
 
 
找到pages->index->index.vue,在onload方法中添加请求,绑定数据
 
 
显示效果如下:

 

 

但光加载数据还远远不够,后续会对列表进行组件封装,父子组件的通信,使其更加简洁,扩展性更强。
增加下拉加载更多等优化用户体验的功能。
 
以上,仅用于学习和总结!
 

posted @ 2021-12-12 20:59  y_w_k  阅读(2491)  评论(2编辑  收藏  举报