Vue.js快速入门之五:Mockjs的使用和语法详解
在前后端分离的开发中,需要前后台同时开发,但是在后端完成前,暂时是没有数据返回给前端使用的,如果先写静态后面再改,就有重复工作的内耗存在。所以开发初始前端会使用模拟数据,这里使用是mockjs。
Mock.js的语法规范包括两部分,这些后面会跟大家详解的。
- 数据模板定义规范(Data Template Definition,DTD)
- 数据占位符定义规范(Data Placeholder Definition,DPD)
一、安装mockjs
npm install --save-dev mockjs
二、创建mock目录
在项目的src目录下,创建mock文件夹,里面新建index.js,用来存储http模拟反馈的接口数据。目录结构如下图:
2.1 index.js添加模拟数据
在index.js添加一个栏目列表接口,代码如下:
import { mock } from 'mockjs'
//栏目接口
mock("/api/category", (req, res) => {return {code: 200,message: 'success',data: [{"id": 1, "name": "菜单栏目一", "path": "/category/column01"},{"id": 2, "name": "菜单栏目二", "path": "/category/column02"},{"id": 3, "name": "菜单栏目三", "path": "/category/column03"},{"id": 4, "name": "菜单栏目四", "path": "/category/column04"}]}
});
2.2 在main.js中引入mock/index.js
模拟接口定义好后,为了方便所有组件使用,需要将mock/index.js在main.js中引入,代码如下:
import Vue from 'vue'
import App from './App'
import router from './router'
import store from '@/store'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'//引入mock/index.js
require('@/mock/index');Vue.use(ElementUI);
Vue.config.productionTip = false;/* eslint-disable no-new */
new Vue({el: '#app',router,store,components: { App },template: '<App/>'
});
2.3 创建api.js,定义请求函数
我们可以通过http请求,去获取该接口数据了。在前一篇已讲axios的安装和使用,这里就直接使用了。在src目录中再创建一个api目录,用来存储所有的api请求文件;api目录创建完后,再在内部新建api.js文件,用来定义相关请求。代码如下:
import service from '@/utils/request'//获取栏目数据
export const getCategory = () => {return service.get('/api/category', {});
}
2.4 页面中获取接口数据
先在created中调用接口,获取栏目数据并赋值。代码如下:
import { getCategory } from '@/api/api'
export default {data () {return {menuList: []}},created(){getCategory().then(res => {if(res.code==200){this.menuList = res.data;}console.log(res);}).catch(error => {console.error(error);})}
}
输出结果如下图:
三、数据模板定义规范(DTD)
数据模板中的每个属性由3部分构成:属性名、生成规则、属性值。属性名和生成规则由“|”分隔,代码如下:
/*name 属性名 (选填)rule 生成规则 (选填)value 属性值 可以含有点位符 @占位符(必填)
*/
"name|rule": value
生成规则有7种格式,具体如下:
- 'name|min-max': value
- 'name|count': value
- 'name|min-max.dmin-dmax': value
- 'name|min-max.dcount': value
- 'name|count.dmin-dmax': value
- 'name|count.dcount': value
- 'name|+step': value
3.1 属性值是字符串 String
规则 | 类型 | 描述 |
---|---|---|
'name|min-max': string | String | 通过重复string生成一个字符串,重复次数大于等于min,小于等于max。 |
'name|count': string | String | 通过重复string生成一个字符串,重复次数等于count。 |
生成规则和示例:
let _string = mock({'name|2-10': '','msg|10': ''
});console.log(_string);
输出结果如下图:
3.2 属性值是数字 Number
规则 | 类型 | 描述 |
---|---|---|
'name|+1': number | Number | 属性值自动加1,初始值为number。 |
'name|min-max': number | Number | 生成一个大于min、于小等于max的整数,属性值number只是用来确定类型。 |
‘name|min-max.dmin-dmax': number | Number | 生成一个浮点数,整数部分大于等于min、小于等于max,小数部分保留dmin到dmax位。 |
生成规则和示例:
let _number = mock({'int1|+1': 1,'int2|3-20': 1,'float1|1-100.1-10': 1,'float2|123.1-10': 1,'float3|123.3': 1,'float4|123.10': 1.123
})console.log(_number);
输出结果如下图:
3.3 属性值是布尔型 Boolean
规则 | 类型 | 描述 |
---|---|---|
’name|1': Boolean | Boolean | 随机生成一个布尔值,值为true的概率是1/2,值为false的概率同样是1/2 |
'name|min-max': value | Boolean | 随机生成一个布尔值,值为value的概率是 min / (min + max),值为!value的概率是max / (min + max)。 |
生成规则和示例:
for(var i = 0; i < 10; i++){let _boolean = mock({'isTrue|1': false,'age|1-100': 1,})console.log(_boolean);
}
输出结果如下图:
3.4 属性值是对象 Object
生成规则和示例:
for(var i = 0; i < 5; i++){let _object = mock({'name|2': { tom: '1', john: '2', lily: '3', peter: '4' },'age|1-3': { num1: 20, num2: 30, num3: 15, num4: 30, num5: 50 },})console.log(JSON.stringify(_object));
}
输出结果如下图:
3.5 属性值是数组 Array
生成规则和示例:
let _array = mock({'name|1': ['tom', 'john', 'lily', 'peter'],'name2|+1': ['tom', 'john', 'lily', 'peter'],'name3|3': ['tom', 'john', 'lily', 'peter'],'name4|1-2': ['tom', 'john', 'lily', 'peter']
})
console.log(_array);
输出结果如下图:
从上结果可以看出name3|3将原数组重复了循环3次返回一个新数组;name4|1-2随机循环了2次返回一个新数组。
3.6 属性值是函数 Function
生成规则和示例:
let _func = mock({'name': () => {return 5 + 3;}
})
console.log(_func);
输出结果如下图:
3.7 属性值是正则表达式 RegExp
规则 | 类型 | 描述 |
---|---|---|
’name': regexp | EegExp | 根据正则表达式regexp反向生成可以匹配它的字符串。用于生成自定义格式的字符串。 |
生成规则和示例:
let _regexp = mock({'regexp1': /[a-z][A-Z][0-9]/,'regexp2': /\w\W\s\S\d\D/,'regexp3': /\d{5,10}/
})
console.log(_regexp);
输出结果如下图:
四、数据点位符定义规范(DPD)
占位符只是在属性值字符串中占个位置,并不出现在最终的属性值中。
占位符的格式:
@占位符
@占位符(参数 [, 参数])
注意:
- 用@来标识其后的字符串是“占位符”
- 占位符引用是 Mock.Random中的方法
- 通过 Mock.Random.extend() 来扩展自定义占位符
- 点位符 也可以引用 数据模板中的属性。
- 占位符 会优先引用 数据模板 中的属性。
- 占位符 支持相对路径 和绝对路径。
代码示例:
let _result = mock({name: {first: '@FIRST',middle: '@FIRST',last: '@LAST',full: '@first @middle @last'}
})
console.log(_result);
输出结果如下图:
五、Mock.mock()函数
5.1 Mock.mock根据不同参数,来拦截并作出响应
名称 | 描述 |
---|---|
Mock.mock( template ) | 根据数据模板生成模拟数据 |
Mock.mock( rurl, template ) | 记录数据模板。当拦截到匹配rurl的ajax的请求时,将根据数据模板template生成模拟数据,并作为响应数据返回。 |
Mock.mock( rurl, function ( options) ) | 记录用于生成响应数据的函数。当拦截到匹配rurl的Ajax请求时,函数function(options)将被执行,并把执行结果作为响应数据返回。 |
Mock.mock( rurl, rtype, template) | 记录数据模板。当拦截到匹配rurl和rtype的Ajax请求时,将根据数据模板template生成模拟数据,并作为响应数据返回。 |
Mock.mock( rurl, rtype, function (options) ) | 记录用于生成响应数据函数。当拦截到匹配rurl和rtype的ajax请求时,函数function(options)将被执行,并把执行结果作为响应数据返回。 |
5.2 参数列表
参数 | 是否可选 | 描述 |
---|---|---|
rurl | 可选 | 表示需要拦截的URL,可以是URL字符串或URL正则。 |
rtype | 可选 | 表示需要拦截的Ajax请求类型。例如GET、POST、PUT、DELETE |
template | 可选 | 表示数据模板,可以是对象或字符串。例如 { 'data|1-10' : [{}] } 、 '@EMAIL'。 |
function ( options ) | 可选 | 表示用于生成响应数据的函数。 |
options | 指向本次请求的Ajax选项集,含有url、type和body三个属性。 |
六、Mock.setup()函数
配置拦截Ajax请求时的行为,支持配置项有: timeout。
Mock.setup ( settings )
参数 | 是否必填 | 描述 |
---|---|---|
timeout | 可选 | 指定被拦截的Ajax请求的响应时间,单位是毫秒。值可以是正整数,也可以是横杠'-'风格的字符串,表示 取区间值。 |
代码示例:
import { setup } from 'mockjs'setup({timeout: 400
});//或者setup({timeout: '200-600'
});
七、Mock.Random
Mock.Random是一个工具类,用一直很安静成各种随机数据。代码示例如下:
console.log( Random.email() )
console.log( mock('@email') )
console.log(mock( { email: '@email' } )
)
输出结果如下图:
7.1 方法
Mock.Random 提供的完整方法如下:
类型 | 方法 |
---|---|
Basic | boolean, natural, integer, float, character, string, range, date, time, datetime, now |
Image | image, dataImage |
Color | color |
Text | paragraph, sentence, word, title, cparagraph, csentence, cword, ctitle |
Name | first, last, name, cfirst, clast, cname |
Web | url, domain, email, ip, tId |
Address | area, region |
Helper | capitalize, upper, lower, pick, shuffle |
Miscellaneous | guid, id |
7.2 扩展
Mock.Random中的方法与数据模板可支持扩展,代码示例如下:
import { Random } from 'mockjs'Random.extend({constellation: function(date) {var constellations = ['白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '双鱼座']return this.pick(constellations)}
});console.log( Random.constellation() )
console.log( mock('@constellation') )
console.log( mock({constellation: '@constellation'})
)
输出结果如下图:
八、Mock.valid()
Mock.valid( template, data )
校验真实数据 data 是否与数据模板 template 匹配。
参数 | 是否必选 | 描述 |
---|---|---|
template | 必 选 | 表示数据模板,可以是对象或字符串。例如:{ 'data|1-10' : [{}] } 、 '@EMAIL' |
data | 必选 | 表示真实数据 |
代码示例:
let template = {name: 'value1'
}
let data = {name: 'value2'
}
let _result = valid(template, data)console.log('result', _result);
输出结果如下图:
翻译过来意思如下:
[{"path": ["data","name"],"类型": "value","真实数据": "value2","期望的": "value1","确保的": "相等","信息": "[VALUE] 期望ROOT.name'的值等于value1,但等于value2"}
]
九、Mock.toJSONSchema()
Mock.toJSONSchema( template )
把Mock.js风格的数据模板 template 转换成 JSON Schema。
参数 | 是否必选 | 描述 |
---|---|---|
template | 必选 | 表示 数据模板,可以是对象或字符串。例如:{ 'data|1-10' : [{}] } 、 '@EMAIL' |
代码示例如下:
import { toJSONSchema } from 'mockjs'let _template = toJSONSchema( {'key|1-10': '★'
} )console.log(_template);
输出结果如下:
{"name": undefined,"path": ["ROOT"],"type": "object","template": {"key|1-10": "★"},"rule": {},"properties": [{"name": "key","path": ["ROOT","key"],"type": "string","template": "★","rule": {"parameters": ["key|1-10", "key", null, "1-10", null],"range": ["1-10", "1", "10"],"min": 1,"max": 10,"count": 3,"decimal": undefined,"dmin": undefined,"dmax": undefined,"dcount": undefined}}]
}
更多详细说明,请访问官方地址:Mock.js
Vue.js快速入门之五:Mockjs的使用和语法详解相关推荐
- Vue.js快速入门之八:实现登录功能
系统登录是指用户必须提供满足一定条件的信息后,才可以进入系统.最早系统一般是指用户名和密码,如今,登录方式已多元化,系统一般登录方式有:用户名+密码.二维码扫码登录.第三方授权登录.手机号+短信登录等 ...
- (vue基础试炼_01)使用vue.js 快速入门hello world
文章目录 一.需求案例 二.案例实现 2.1. 原始js写法 2.2. 怎样使用vue.js ? 2.3. 使用vue.js 写法 三.案例vue简述? 四.案例趣味延伸 五.表达值作用及嘱咐语 一. ...
- QT快速入门、三点求圆心实现详解
在编程中,会经常用到数学计算,所以C++将常用的数学计算,例如求正余弦等,封装成函数(正是我们在3.2 数学计算中学习到的),我们只需要写入简单的语句就可以执行所需要的功能,这正是函数的意义.在这一章 ...
- vue.js快速入门
以前看到多少天学习系列,我都深感烦躁,短短几天怎么可以精通,那是对于他们而言.但是,今天我要写一个快速入门,本人觉得还是有一点用处,因为,我不可能在一天之内精通某种东西,却可以在一两小时入门. 回到v ...
- Vue.js快速入门+项目实战(源码)
Vue.js电影网站项目 github 链接(如果觉得有用记得start哦~): 项目源代码链接 目录 前言 安装 Vue.js 1.Vue.js主要特性 2.Vue.js实例 3.Vue.js路由 ...
- php node.js django,Vue.js和Django搭建前后端分离项目示例详解
本篇文章主要介绍了Django+Vue.js搭建前后端分离项目的示例,具有一定参考价值,有兴趣的可以了解一下 在写这篇文章的时候,顺带学习了一下关于Markdown的使用方法. 笔者是个渣渣,一切都是 ...
- Vue.js 源码分析(九) 基础篇 生命周期详解
先来看看官网的介绍: 主要有八个生命周期,分别是: beforeCreate.created.beforeMount.mounted.beforeupdate.updated .beforeDes ...
- 微信公众平台菜单编辑php,如何使用Vue.js实现微信公众号菜单编辑器(思路详解)...
这次给大家带来如何使用Vue.js实现微信公众号菜单编辑器(思路详解),使用Vue.js实现微信公众号菜单编辑器的注意事项有哪些,下面就是实战案例,一起来看一下. 学习一段时间Vue.js,于是想尝试 ...
- Vue.js中 watch(深度监听-deep)原理以及详解
handler方法和immediate属性 这里 watch 的一个特点是,最初绑定的时候是不会执行的,要等到 firstName 改变时才执行监听计算.那我们想要一开始就让他最初绑定的时候就执行改怎 ...
最新文章
- webGL的一些咨询--web3D
- 给Nginx配置一个自签名的SSL证书
- JAVA中return与finally的先后关系
- 只用jsp实现同样的Servlet功能
- Spring自定义注解+redis实现接口限流
- Jupyter notebook中用python matplotlib ax3.plot_surface绘制的三维图(3D图)(三维函数)无法旋转解决办法(%matplotlib notebook)
- Linux字符设备驱动框架
- Last Theorem CodeForces - 1325F(dfs树找最大环+思维)
- ubuntu16.04 + ros-kinetic 配置cartographer
- ubuntu下修改mysql编码,使能支持中文
- 职业高中计算机网络试讲稿,2021教师资格证考试面试高中信息技术试讲稿——《建立数据库的基本过程》...
- oracletns中不存在名称为_关于数据库:向SQL Developer添加新连接时未显示Oracle TNS名称...
- 查看IIS进程所对应的应用程序池名称
- 用DISKGEN恢复硬盘数据
- php模拟表单提交,php用fsockopen()函数实现模拟提交表单。
- 基于python的数字印刷体识别_利用卷积神经网络识别印刷体中文
- matlab信号处理——数据处理基础
- python实现归结演绎推理_归结演绎推理
- Web服务http日志收集
- 2015iMAC安装macOS/Win11双系统 外置硬盘安装macOS/Win11双系统(非PE非DP虚拟机非WTG)
热门文章
- 获得32位UUID字符串和指定数目的UUID
- 最新限量红包封面,限时领取!
- 使用VMware镜像文件快速安装Kali linux
- css鼠标划出动画(transition属性详解)
- pytorch局部范围内禁用梯度计算,no_grad、enable_grad、set_grad_enabled使用举例
- 动物识别——人工智能
- OSChina 周五乱弹 —— 生命诚可贵,改 BUG 价更高?
- HTML怎么跟随页面缩放,如何让网页跟着 浏览器全比例缩小(示例代码)
- 请求成功但是报错: Uncaught (in promise)
- 职场健康:大脑20个已知秘密[转]