vite+vue3中使用mock模拟数据问题

作者:liguoyuan819 时间:2024-04-28 09:27:56 

1.安装mockjs和vite-plugin-mock

npm i mockjs vite-plugin-mock --save-dev

2.在vite.config.ts文件中配置

vite-plugin-mock使用方式

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { viteMockServe } from 'vite-plugin-mock'

// https://vitejs.dev/config/
export default defineConfig({
 plugins: [vue(),
   viteMockServe({
     supportTs:false,
     logger: false,
     mockPath: "./mock/"
   })
 ]
})

vite-plugin-mock 中的配置内容的含义

{
supportTs?: boolean; --是否读取ts文件模块,设置为true时不能读取js文件

logger?:boolean; --是否在控制台显示请求日志
mockPath?: string;  --设置模拟数据的存储文件夹,如果不是index.js需要写明完整路径
ignore?: RegExp | ((fileName: string) => boolean);--读取文件时忽略指定格式的文件
watchFiles?: boolean;--是否监视mockPath文件夹内文件的修改
localEnabled?: boolean;--设置是否启用本地 xxx.ts 文件,不要在生产环境中打开它.设置为 false 将禁用 mock 功能
ignoreFiles?: string[]; --读取文件时忽略的文件
configPath?: string;--设置模拟读取的数据条目。 当文件存在并且位于项目根目录中时,将首先读取并使用该文件。 配置文件返回一个数组
prodEnabled?: boolean;--设置打包是否启用 mock 功能
injectFile?: string;--如果生产环境开启了 mock 功能,即prodEnabled=true.则该代码会被注入到injectFile对应的文件的底部。默认为main.{ts,js}。这样做的好处是,可以动态控制生产环境是否开启 mock 且在没有开启的时候 mock.js 不会被打包。如果代码直接写在main.ts内,则不管有没有开启,最终的打包都会包含mock.js

injectCode?: string;--injectCode代码注入的文件,默认为项目根目录下src/main.{ts,js}

}

3.在根目录下创建mock文件夹

新建文件夹mock/index.js

export default [{
   type:'get',
   url:'/user/login',
   response: () => {
       return {isAuth:true}
   }
},{
   type:'get',
   url:'/user/menu',
   response: () => {
       return {menusList:[{
           id:'/sysManagent',
           title:'系统管理',
           subMenuList:[
               {
                   id:'/userList',
                   title:'用户管理',
                   path:'/user/manage'
               },
               {
                   id:'/roleList',
                   title:'角色管理',
                   path:'/user/role'
               },
               {
                   id:'/permissionList',
                   title:'权限管理',
                   path:'/user/permission'
               }
           ]
       },{
           id:'businessManagent',
           title:'业务管理',
           subMenuList:[
               {
                   id:'/businessList',
                   title:'业务逻辑'
               }
           ]
       }],statusCode:200}
   }
}]

4.在文件中调用

<template>
 <div class="aside">
   <div class="collpase-btn" @click="collpaseMenu">
     <el-icon><fold /></el-icon>
   </div>
   <el-menu
     active-text-color="#ffd04b"
     background-color="#545c64"
     class="el-menu-vertical-demo"
     :default-active="router.path"
     text-color="#fff"
     :collapse="store.state.isCollapse"
     @open="handleOpen"
     @close="handleClose"
     :router="true"
   >
     <el-sub-menu
       :index="item.id"
       v-for="item in menus.mensList"
       :key="item.id"
     >
       <template #title>
         <el-icon><grid /></el-icon>
         <span>{{ item.title }}</span>
       </template>
       <el-menu-item :index="it.id" v-for="it in item.subMenuList">
         {{ it.title }}
       </el-menu-item>
     </el-sub-menu>
   </el-menu>
 </div>
</template>
<script lang="ts">
import axios from 'axios'
import { defineComponent, onMounted, reactive } from 'vue'
import { useRoute } from 'vue-router'
import { useStore } from 'vuex'

export default defineComponent({
 name: 'Aside',
 setup() {
   const store = useStore()
   const router = useRoute()
   const mensList: any = []
   let menus = reactive({ mensList })

const handleOpen = (key: string, keyPath: string[]) => {}
   const handleClose = (key: string, keyPath: string[]) => {}
   const collpaseMenu = () => {
     store.dispatch('collpaseChange')
   }
   onMounted(() => {
     axios.get('/user/menu').then((res) => {
       console.log(res);
       menus.mensList = res.data.menusList
     })
   })
   return {
     handleOpen,
     handleClose,
     collpaseMenu,
     store,
     menus,
     router
   }
 },
})
</script>

<style lang="scss" scoped>
.el-menu-item.is-active {
 background-color: var(--el-menu-hover-bg-color);
}
.collpase-btn {
 text-align: center;
 width: 100%;
 padding: 10px 0px;
 cursor: pointer;
 .el-icon {
   color: white;
   font-size: 24px;
 }
}
</style>

vite+vue3中使用mock模拟数据问题

5.其他

如果mock文件夹建在src文件目录下,需要修改tsconfig.json文件

"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue","src/mock/**/*.ts"],

来源:https://blog.csdn.net/liguoyuan819/article/details/124768562

标签:vite,vue3,mock,模拟数据
0
投稿

猜你喜欢

  • nodejs读取并去重excel文件

    2024-04-27 16:17:48
  • Django中对数据查询结果进行排序的方法

    2021-01-31 23:40:18
  • Django与DRF结合的全局异常处理方案详解

    2021-05-19 22:53:16
  • Python爬虫包 BeautifulSoup 递归抓取实例详解

    2023-03-06 11:46:26
  • Pyinstaller 打包exe教程及问题解决

    2023-01-08 01:40:00
  • Pycharm远程连接服务器并实现代码同步上传更新功能

    2023-09-20 04:44:40
  • sqlserver存储过程语法详解

    2024-01-21 04:43:53
  • 107条javascript(js)常用小技巧

    2007-10-30 12:40:00
  • python使用py2neo创建neo4j的节点和关系

    2021-09-25 01:03:28
  • python批量修改xml属性的实现方式

    2022-10-03 12:34:58
  • mat矩阵和npy矩阵实现互相转换(python和matlab)

    2023-10-19 17:12:02
  • golang API请求队列的实现

    2024-03-11 16:39:50
  • mysql exists与not exists实例详解

    2024-01-24 22:57:14
  • Python星号*与**用法分析

    2021-11-30 10:32:50
  • django中forms组件的使用与注意

    2021-03-11 00:14:04
  • Python利用Selenium实现弹出框的处理

    2021-11-12 23:21:50
  • Python笔试面试题小结

    2022-07-17 12:51:23
  • 让表单 input 只能输入数字

    2008-06-08 13:54:00
  • django ListView的使用 ListView中获取url中的参数值方式

    2022-06-17 10:41:57
  • 详解Python的Django框架中的templates设置

    2021-12-15 15:16:06
  • asp之家 网络编程 m.aspxhome.com