uni-app官网:https://uniapp.dcloud.net.cn/
1:新建一个测试项目

2:模拟一个简单的请求

index.vue
<template>
<view class="page">
<view class="uni-list">
<view class="uni-list-cell" hover-class="uni-list-cell-hover" v-for="item in itemList">
<view class="uni-list-cell-navigate uni-navigate-right uni-media-list ">
<view class="uni-media-list-logo">
<image v-if="showImg" :src="item.thumbnail_pic_s"></image>
</view>
<view class="uni-media-list-body">
<view class="uni-media-list-text-top">{{item.author_name}}</view>
<view class="uni-media-list-text-bottom uni-ellipsis">{{item.title}}</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
showImg: false,
itemList: []
}
},
onLoad() {
this.getList();
this.showImg = true;
},
methods: {
getList() {
uni.request({
url: '../../static/1.json',
success: (res) => {
console.log(res.data);
this.itemList = res.data.result.data;
}
});
}
}
}
</script>
<style>
.title {
padding: 20upx;
}
.uni-navigate-right.uni-media-list {
height: 80px;
}
</style>
json模拟的数据
{
"reason": "成功的返回",
"result": {
"stat": "1",
"data": [{
"author_name": "1"
}, {
"author_name": "2"
}, {
"author_name": "3"
}, {
"author_name": "4"
}]
},
"error_code": 0
}
3:请求成功

现在需要开始进行封装
对以上进行一些修改
步骤如下:
1、项目下新建common文件夹,再创建request.js文件

2、打开request.js文件,开始写封装的代码
思路很简单
定义域名:baseUrl;
定义方法:api;
通过promise异步请求,最后导出方法。
request.js参考代码如下
// request.js
const baseUrl = 'http://192.xxx.xx.103:8091/chemApp'
// const baseUrl = 'http://localhost:8082/chemApp'
//const baseUrl = '/chemApp'
//const baseUrl = ''
const request = (options = {}) => {
return new Promise((resolve, reject) => {
uni.request({
url: baseUrl + options.url || '',
method:options.type || 'GET' ,
data: options.data || {},
header: options.header || {},
}).then((response) => {
setTimeout(function() {
uni.hideLoading();
}, 200);
let [error, res] = response;
resolve(res.data);
}).catch(error => {
let [err, res] = error;
reject(err)
})
});
}
const get=(url,data,options={})=>{
options.type='get';
options.data = data;
options.url = url;
return request(options)
}
const post = (url, data, options = {}) => {
options.type = 'post';
options.data = data;
options.url = url;
return request(options)
}
const put = (url, data, options = {}) => {
options.type = 'put';
options.data = data;
options.url = url;
return request(options)
}
export default {
request,
get,
post,
put,
baseUrl
}
3、在main.js全局注册
import Vue from 'vue'
import App from './App'
import request from 'common/request.js'
Vue.prototype.$request = request
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()

4、页面调用,发起一个get请求
this.$request.get('/caller/getCallers.action', {
"name": "", // 当前页码
"pageBean.page": 1, // 当前页码
"pageBean.rows": 2, // 每页显示数量
"pageBean.pagination": true
}).then(res => {
console.log(res)
})
页面调用的index.vue
<template>
<view>
<uni-list v-for="(item,index) in productList" :key="index">
<uni-list-item :title="item.author_name" :note="item.title"></uni-list-item>
</uni-list>
</view>
</template>
<script>
import uniList from "@/components/uni-list/uni-list.vue"
import uniListItem from "@/components/uni-list-item/uni-list-item.vue"
export default {
components: {
uniList,
uniListItem
},
data() {
return {
productList: [],
};
},
onLoad() {
this.getList();
},
methods: {
getList() {
this.$request.get('/caller/getCallers.action', {
// 传参参数名:参数值,如果没有,就不需要传
// "username": "john",
// "key": this.searchValue
}).then(res => {
// 打印调用成功回调
console.log(res)
this.productList = res;
})
},
}
}
</script>
<style>
</style>
调用成功

网友评论