在前后端分离的开发中,需要前后台同时开发,但是在后端完成前,暂时是没有数据返回给前端使用的,如果先写静态后面再改,就有重复工作的内耗存在。所以开发初始前端会使用模拟数据,这里使用是mockjs。

Mock.js的语法规范包括两部分,这些后面会跟大家详解的。

  1. 数据模板定义规范(Data Template Definition,DTD)
  2. 数据占位符定义规范(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种格式,具体如下:

  1. 'name|min-max': value
  2. 'name|count': value
  3. 'name|min-max.dmin-dmax': value
  4. 'name|min-max.dcount': value
  5. 'name|count.dmin-dmax': value
  6. 'name|count.dcount': value
  7. '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)

占位符只是在属性值字符串中占个位置,并不出现在最终的属性值中。

占位符的格式:

@占位符
@占位符(参数 [, 参数])

注意:

  1. 用@来标识其后的字符串是“占位符”
  2. 占位符引用是 Mock.Random中的方法
  3. 通过 Mock.Random.extend() 来扩展自定义占位符
  4. 点位符 也可以引用 数据模板中的属性。
  5. 占位符 会优先引用 数据模板 中的属性。
  6. 占位符 支持相对路径 和绝对路径。

代码示例:

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的使用和语法详解相关推荐

  1. Vue.js快速入门之八:实现登录功能

    系统登录是指用户必须提供满足一定条件的信息后,才可以进入系统.最早系统一般是指用户名和密码,如今,登录方式已多元化,系统一般登录方式有:用户名+密码.二维码扫码登录.第三方授权登录.手机号+短信登录等 ...

  2. (vue基础试炼_01)使用vue.js 快速入门hello world

    文章目录 一.需求案例 二.案例实现 2.1. 原始js写法 2.2. 怎样使用vue.js ? 2.3. 使用vue.js 写法 三.案例vue简述? 四.案例趣味延伸 五.表达值作用及嘱咐语 一. ...

  3. QT快速入门、三点求圆心实现详解

    在编程中,会经常用到数学计算,所以C++将常用的数学计算,例如求正余弦等,封装成函数(正是我们在3.2 数学计算中学习到的),我们只需要写入简单的语句就可以执行所需要的功能,这正是函数的意义.在这一章 ...

  4. vue.js快速入门

    以前看到多少天学习系列,我都深感烦躁,短短几天怎么可以精通,那是对于他们而言.但是,今天我要写一个快速入门,本人觉得还是有一点用处,因为,我不可能在一天之内精通某种东西,却可以在一两小时入门. 回到v ...

  5. Vue.js快速入门+项目实战(源码)

    Vue.js电影网站项目 github 链接(如果觉得有用记得start哦~): 项目源代码链接 目录 前言 安装 Vue.js 1.Vue.js主要特性 2.Vue.js实例 3.Vue.js路由 ...

  6. php node.js django,Vue.js和Django搭建前后端分离项目示例详解

    本篇文章主要介绍了Django+Vue.js搭建前后端分离项目的示例,具有一定参考价值,有兴趣的可以了解一下 在写这篇文章的时候,顺带学习了一下关于Markdown的使用方法. 笔者是个渣渣,一切都是 ...

  7. Vue.js 源码分析(九) 基础篇 生命周期详解

    先来看看官网的介绍: 主要有八个生命周期,分别是: beforeCreate.created.beforeMount.mounted.beforeupdate.updated   .beforeDes ...

  8. 微信公众平台菜单编辑php,如何使用Vue.js实现微信公众号菜单编辑器(思路详解)...

    这次给大家带来如何使用Vue.js实现微信公众号菜单编辑器(思路详解),使用Vue.js实现微信公众号菜单编辑器的注意事项有哪些,下面就是实战案例,一起来看一下. 学习一段时间Vue.js,于是想尝试 ...

  9. Vue.js中 watch(深度监听-deep)原理以及详解

    handler方法和immediate属性 这里 watch 的一个特点是,最初绑定的时候是不会执行的,要等到 firstName 改变时才执行监听计算.那我们想要一开始就让他最初绑定的时候就执行改怎 ...

最新文章

  1. webGL的一些咨询--web3D
  2. 给Nginx配置一个自签名的SSL证书
  3. JAVA中return与finally的先后关系
  4. 只用jsp实现同样的Servlet功能
  5. Spring自定义注解+redis实现接口限流
  6. Jupyter notebook中用python matplotlib ax3.plot_surface绘制的三维图(3D图)(三维函数)无法旋转解决办法(%matplotlib notebook)
  7. Linux字符设备驱动框架
  8. Last Theorem CodeForces - 1325F(dfs树找最大环+思维)
  9. ubuntu16.04 + ros-kinetic 配置cartographer
  10. ubuntu下修改mysql编码,使能支持中文
  11. 职业高中计算机网络试讲稿,2021教师资格证考试面试高中信息技术试讲稿——《建立数据库的基本过程》...
  12. oracletns中不存在名称为_关于数据库:向SQL Developer添加新连接时未显示Oracle TNS名称...
  13. 查看IIS进程所对应的应用程序池名称
  14. 用DISKGEN恢复硬盘数据
  15. php模拟表单提交,php用fsockopen()函数实现模拟提交表单。
  16. 基于python的数字印刷体识别_利用卷积神经网络识别印刷体中文
  17. matlab信号处理——数据处理基础
  18. python实现归结演绎推理_归结演绎推理
  19. Web服务http日志收集
  20. 2015iMAC安装macOS/Win11双系统 外置硬盘安装macOS/Win11双系统(非PE非DP虚拟机非WTG)

热门文章

  1. 获得32位UUID字符串和指定数目的UUID
  2. 最新限量红包封面,限时领取!
  3. 使用VMware镜像文件快速安装Kali linux
  4. css鼠标划出动画(transition属性详解)
  5. pytorch局部范围内禁用梯度计算,no_grad、enable_grad、set_grad_enabled使用举例
  6. 动物识别——人工智能
  7. OSChina 周五乱弹 —— 生命诚可贵,改 BUG 价更高?
  8. HTML怎么跟随页面缩放,如何让网页跟着 浏览器全比例缩小(示例代码)
  9. 请求成功但是报错: Uncaught (in promise)
  10. 职场健康:大脑20个已知秘密[转]