开发项目的时候,如果后端接口没有出来,前端工程师也不必非得等接口出来才进行下步开发。可以使用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>

 

五、请求的数据结果 返回

 

 

Logo

前往低代码交流专区

更多推荐