vue3使用Mock.js模拟接口数据
开发项目的时候,如果后端接口没有出来,前端工程师也不必非得等接口出来才进行下步开发。可以使用mock.js来模拟接口数据,以下就是使用vue3设置hook函数来封装axios请求,配合mock.js来实现的代码,mock的使用借鉴了大佬的博文https://blog.csdn.net/possible_fish/article/details/123776419一、安装mock.js文件执行npm
·
开发项目的时候,如果后端接口没有出来,前端工程师也不必非得等接口出来才进行下步开发。可以使用mock.js来模拟接口数据,以下就是使用vue3设置hook函数来封装axios请求,配合mock.js来实现的代码,mock的使用借鉴了大佬的博文https://blog.csdn.net/possible_fish/article/details/123776419
一、安装mock.js文件
执行npm命令:
npm install mockjs
二、引入mock文件,并定义需要的数据字段
const Mock = require("mockjs");
let data = Mock.mock({
"data|6": [ //生成6条数据 数组
{
"shopId|+1": 1,//生成商品id,自增1
"shopMsg": "@ctitle(10)", //生成商品信息,长度为10个汉字
"shopName": "@cname",//生成商品名 , 都是中国人的名字
"shopTel": /^1(5|3|7|8)[0-9]{9}$/,//生成随机电话号
"shopAddress": "@county(true)", //随机生成地址
"shopStar|1-5": "★", //随机生成1-5个星星
"salesVolume|30-1000": 30, //随机生成商品价格 在30-1000之间
"shopLogo": "@Image('100x40','#c33', '#ffffff','小北鼻')", //生成随机图片,大小/背景色/字体颜色/文字信息
"food|2": [ //每个商品中再随机生成2个food
{
"foodName": "@cname", //food的名字
"foodPic": "@Image('100x40','#c33', '#ffffff','小可爱')",//生成随机图片,大小/背景色/字体颜色/文字信息
"foodPrice|1-100": 20,//生成1-100的随机数
"aname|2": [
{
"aname": "@cname",
"aprice|30-60": 20
}
]
}
]
}
]
})
Mock.mock(/goods\/goodAll/, 'post', () => { //三个参数。第一个:路径,第二个:请求方式post/get,第三个:回调,返回值
return data
})
三、全局引入定义好的mock模拟接口文件,类似于接口文件
// 引入mock模拟数据的文件
import "/src/interfaceMock/shop/shop.js";
四、在页面上请求,下面的第一张图是使用hook函数封装的axios请求
import { ref } from "vue";
// 引入axios
import axios from "axios";
// 发送ajax的请求
export default function<T> (url:string) {
// 加载的状态
const loading = ref(true)
// 请求成功的数据
const data = ref<T | null>(null)
// 错误信息
const errorMsg = ref('')
// 发送请求
axios.post(url).then(respose => {
// 加载的状态
loading.value = false
data.value = respose.data
console.log('测试',respose.data)
}).catch(error => {
// 加载的状态
loading.value = false
errorMsg.value = error.message || '未知错误'
})
return {
loading,
data,
errorMsg
}
}
<template>
<h2>自定义hook函数,类似于minxin</h2>
<h3>横坐标:{{x}}</h3>
<h3>纵坐标:{{y}}</h3>
<hr/>
<h4 v-if="loading">正在加载中。。。。</h4>
<ul>
<li>id : {{data.id}}</li>
<li>地址 : {{data.address}}</li>
<li>手机号 : {{data.phone}}}</li>
</ul>
<!-- <ul v-for="item in data" :key="item.id">
<li>id:{{item.id}}</li>
<li>地址:{{item.title}}</li>
<li>手机号:{{item.phone}}}</li>
</ul> -->
<h4 v-if="errorMsg">{{errorMsg}}</h4>
</template>
<script lang="ts">
import { defineComponent } from 'vue'
// 引入hook函数
import useMousePosition from "./hooks/useMousePosition";
import useRequest from "./hooks/useRequest";
// 定义接口,约束对象的类型
interface address{
id:number;
address:string;
phone:string
}
interface products{
id:number;
title:string;
phone:string
}
export default defineComponent({
name:'App',
// 需求1:用户在页面中点击页面,把点击的位置的横纵标收集起来并展示出来
setup() {
const {x,y} = useMousePosition()// 获取数组数据
const { loading, data, errorMsg } = useRequest<address>('http://localhost:8080/goods/goodAll') // 获取对象数据
console.log()
return {
x,
y,
loading,
data,
errorMsg
}
},
})
</script>
五、请求的数据结果 返回
更多推荐
已为社区贡献4条内容
所有评论(0)