mockjs使用
1.mockjs是什么?
生成随机数据,拦截 Ajax 请求。
通过随机数据,模拟各种场景;不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据;
支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等;
支持支持扩展更多数据类型,支持自定义函数和正则。
优点是非常简单方便, 无侵入性, 基本覆盖常用的接口数据类型.
2.使用
1)安装 npm install mockjs
2)新建mock文件,引入mock模块:import Mock from 'mockjs'
3)在main.js中已引入mock文件(项目上线的时候注释掉)
具体如下,模拟一个表格数据:
mock文件:
import Mock from 'mockjs' const {userList} = Mock.mock({ 'userList|56':[ { "id":"@increment()",//自增 "name":"@cname(2,4)", "age|18-25":18,//年龄为18-28之间的随机数字 "sex|1":["男","女"], //性别是数组中的一个,随机的 "address":"@city(true)" } ] }) //获取get请求url参数 const getQuery = (url,name)=>{ const index = url.indexOf("?"); if(index!=-1){ const queryStrArr = url.substr(index+1).split("&"); for(var i =0;i){ const itemArr = queryStrArr[i].split("="); if(itemArr[0]==name){ return itemArr[1]; } } } return null; } //定义获取用户列表的数据 /api/user/getList?pageNum=1&pageSize=10 Mock.mock(/\/api\/user\/getList/,'get',(options)=>{ const pageNum = getQuery(options.url,"pageNum"); const pageSize = getQuery(options.url,"pageSize"); //数据起始位置 (pageNum-1)*pageSize 结束位置:pageNum*pageSize const totalPage = Math.ceil(userList.length/pageSize);//向上取整 const list = pageNum>totalPage?[]:userList.slice((pageNum-1)*pageSize,pageNum*pageSize); return { status:200, msg:'获取数据成功', list:list, total:userList.length } }) //删除用户 Mock.mock(/\/api\/user\/delete/,'delete',(options)=>{ const body = JSON.parse(options.body); const index = userList.findIndex(item=>item.id==body.id); userList.splice(index,1);//从数组中删除 return { status:200, msg:'删除数据成功', list:userList, total:userList.length } })
userList组件(展示数据,使用了element-ui):
<template> <div> <el-dialog title="提示" :visible.sync="dialogVisible" width="30%"> <span>确定删除该用户吗?span> <span slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false">取 消el-button> <el-button type="primary" @click="handleClose()">确 定el-button> span> el-dialog> <el-table :data="userlist" stripe> <el-table-column prop="id" label="ID"> el-table-column> <el-table-column prop="name" label="姓名"> el-table-column> <el-table-column prop="sex" label="性别"> el-table-column> <el-table-column prop="address" label="地址"> el-table-column> <el-table-column prop="age" label="年龄"> el-table-column> <el-table-column label="操作" width="100"> <template slot-scope="scope"> <el-button @click="openDialog(scope.row)" type="text" size="small">删除el-button> template> el-table-column> el-table> <el-pagination background :page-sizes="[10,30, 50, 100]" @size-change="handleSizeChange" @current-change="handleCurrentChange" layout="total,prev,sizes, pager, next" :total="total"> el-pagination> div> template> <script> import axios from "axios" export default { data(){ return{ userlist:[], pageNum:1, pageSize:10, dialogVisible:false, deleteId:-1, total:0, } }, created(){ this.getUserList(); }, methods:{ getUserList(){ axios.get('/api/user/getList',{ params:{ pageNum:this.pageNum, pageSize:this.pageSize } }).then(response=>{ this.userlist = response.data.list; this.total = response.data.total; }) }, //改变每页条数 handleSizeChange(pageSize){ this.pageNum = 1; this.pageSize =pageSize; this.getUserList(); }, //改变当前页码 handleCurrentChange(pageNum){ this.pageNum =pageNum; this.getUserList(); }, openDialog(row){ this.dialogVisible = true; this.deleteId = row.id; }, handleClose(){ this.deleteUser(); this.dialogVisible = false; }, deleteUser(){ axios.delete('/api/user/delete', { data: { //请求参数放在请求体 如果是params 参数是拼在url后面的 id: this.deleteId } }).then(res => { this.getUserList(); console.log(res) }) } } } script>