vue3+ts 配置mockjs模拟数据

mock官方文档

Mock.js

安装mockjs

cnpm install mockjs --save-dev

在src文件夹下创建mock文件夹

mock文件夹下包括index.ts、typing.ts、apis1.ts、apis2.ts、apis3.ts

index.ts

import Mock from "mockjs";
import { MockParams } from "./typing";
import apis1 from "./apis1";
import apis2 from "./apis2";
const mocks = [...apis1, ...apis2];
//设置延时时间
Mock.setup({
  timeout: "300",
});

export function mockXHR() {
  let i: MockParams;
  for (i of mocks) {
    Mock.mock(new RegExp(i.url), i.type || "get", i.response);
  }
}

typing.ts

export interface MockParams {
  url: string;
  type: string;
  data?: any;
  params?: any;
  response(option?: any): Record<string, unknown>;
}

apis1.ts

import Mock from "mockjs";
export default [
  // GetUserInfo
  {
    url: "/upms/user/info",
    type: "get",
    response: () => {
      return {
        code: 200,
        message: "成功",
        data: {
          name: "testName",
        },
      };
    },
  },
  // GetToken
  {
    url: "/auth/oauth/token",
    type: "post",
    response: (option: any) => {
        return Mock.mock({
          code: 200,
          message: "成功",
          data: {
            name: "testToken",
          },
        });
      }
    },
  },
];

apis2.ts

import Mock from "mockjs";
export default [
  // AddGoods
  {
    url: "/api/addgoods",
    type: "post",
    response: function (option: any) {
      const $name = JSON.parse(option.body).name;
      if ($name) {
        return Mock.mock({
          status: 200,
          message: "提交成功",
          data: {
            goods: [
              {
                name: "MacbookPro",
                num: 1,
              },
              {
                name: "ipad",
                num: 2,
              },
            ],
          },
        });
      } else {
        return Mock.mock({
          status: 400,
          message: "未提交参数",
        });
      }
    },
  },
];

apis3.ts生成随机数据

可以采用Mock.js官方文档生成随机数据的方式
这里使用了json5生成随机数据的形式

import Mock from "mockjs";
export default [
  {
    url: "/user/userInfo",
    type: "get",
    response: () => {
      return Mock.mock({
        id: "@id", //得到随机id
        username: "@cname()", //得到随机姓名
        date: "@date()", //得到随机日期
        avatar: "@image('200*200','red','#fff','avatar')", //得到随机图片
        description: "@paragraph", //得到随机描述
        ip: "@ip()", //得到随机ip
        email: "@email()", //得到随机邮箱
        haha: "hahha", //自定义
      });
    },
  },
];

main.ts引入mockjs

import { createApp } from 'vue'
import App from './App.vue'
import 'lib-flexible'
import router from '@/router';
import { createPinia } from 'pinia'


// 创建一个pinia实例
const pinia = createPinia()
const app = createApp(App)


import { mockXHR } from "@/mock/index";
// 判断开发环境
if(process.env.NODE_ENV=="mock"){
	mockXHR();
	// mockXHR2();
}



// 挂在到vue对象上
app.use(pinia)
app.use(router)

app.mount('#app')

shim-vue.d.ts添加声明

使ts能够识别mockjs

declare module "mockjs";

根目录package.json中的scripts新增一种运行式"serve:mock"

"scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "serve:mock": "vue-cli-service serve --mode mock"
  },

在根目录创建对应的.env.development、.env.mock文件(采用下边的写法必须要写在根目录)

NODE_ENV = development
NODE_ENV = mock

在终端执行npm run serve:mock就进入mock模式

因为在main.ts中做了环境判断,所以输入该命令就进入mock模式

npm run serve:mock

在api里面创建接口

// 验证码接口
export function getMock(config: getConfig) {
    const params = new URLSearchParams()
    params.append('page', config.page as string)
    return Service({
        url: "/auth/oauth/token",
        data: params
    })
}

在store下面调用接口

 actions: {
        async getSearch() {
            const getCarDate = await getCarList({ page: 1 })
            this.carList = getCarDate
            // console.log(this.carList)
        },
        // 调用mock接口
        async getMock() {
            const getCarDate = await getMock({ page: '1' })
           console.log(getCarDate);
           
        }
    
    }

在页面中调用接口

<template>
    <div class="about">
        <h1>This is an Search page</h1>
        
        <button @click="searchStore.getMock">获取数据</button>
    </div>
</template>
<script lang="ts" setup>
import { useSearchStore } from '@/store'
const searchStore = useSearchStore()

</script>

控制台输出

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1. 创建一个 Vue3 项目并安装 vite 在命令行中输入以下命令: ``` vue create vue3-todolist cd vue3-todolist npm install -g vite ``` 2. 引入和配置 mockjs 在 `src` 目录下新建一个 `mock` 文件夹,在其中创建 `index.js` 文件并输入以下代码: ```javascript import Mock from 'mockjs' Mock.mock('/api/todolist', 'get', { 'list|5-10': [{ 'id|+1': 1, 'title': '@cparagraph(1)', 'completed|1': true }] }) ``` 这里我们使用了 `Mock.mock()` 方法模拟了一个接口,它会返回一个数组,其中每个对象都有 `id`、`title` 和 `completed` 三个属性。 我们可以通过链接地址 `/api/todolist` 来获取这个接口的数据。 在 `main.js` 中通过下面的代码引入 mockjs: ```javascript import './mock' ``` 3. 创建和配置组件 在 `src/components` 目录下创建 `TodoList.vue` 文件,并输入以下代码: ```vue <template> <div> <h2>Todo List</h2> <ul> <li v-for="item in list" :key="item.id"> <input type="checkbox" v-model="item.completed"> <span :class="{ 'completed': item.completed }">{{ item.title }}</span> </li> </ul> </div> </template> <script> import axios from 'axios' export default { name: 'TodoList', data() { return { list: [] } }, methods: { getList() { axios.get('/api/todolist').then(res => { this.list = res.data.list }).catch(err => { console.log(err) }) } }, mounted() { this.getList() } } </script> <style> .completed { text-decoration: line-through; } </style> ``` 这里我们使用了 Axios 发送请求,并通过 `v-for` 指令和 `list` 数组渲染出列表。 同时,我们使用 `v-model` 双向绑定了每个任务的完成状态,并为已完成的任务添加了下划线样式。 在 `src/App.vue` 中引入 `TodoList` 组件,并使用它: ```vue <template> <div id="app"> <TodoList /> </div> </template> <script> import TodoList from './components/TodoList.vue' export default { name: 'App', components: { TodoList } } </script> ``` 4. 运行项目 在命令行中输入以下命令启动项目: ``` npm run dev ``` 然后在浏览器中访问 `http://localhost:3000/`,即可看到我们通过 mockjs 模拟的 todo list 数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值