mockjs作用就是,生成随机模拟数据,拦截 ajax 请求,可以对数据进行增删改查。在生成数据时,我们就需要能够熟练使用 mock.js 的语法。

Mockjs 的语法规范包括两部分:数据模板定义规范和数据占位符定义规范。

一、数据模板定义规范

数据模板中的每个属性组成有:属性名、生成规则、属性值。

使用语法为:

"name|rule": value

值得注意的有:

  • 属性名和生成规则之间使用 | 分割。
  • 生成规则是可选参数。
  • 生成规则有 7 种形式。
  • 生成规则含义需要依赖于属性值的类型。
  • 属性值可以指定初始值和类型。

生成规则的格式分别有:

1.1、属性值是类型 String

变量的重复次数是一个随机值。

'name|min-max':string
通过生成一个 string 重复 min 到 max 之间的一个字符串。。 //使用
'name|1-3':'a'
运行结果:生成一个 a 的个数为 1-3 之间的字符串变量。可能的结果有:a、aa 、aaa

直接指定重复次数。

'name|count':string
通过生成一个 string 重复 count 次的一个字符串。。 //使用
'name|3':'a'
运行结果:aaa

1.2、属性值是 Number

生成不断累加的数字。

'name|+1':num
初始值为 num ,生成的属性值自动加 1

生成一个区间数值。

'name|min-max':num
生成一个 min 到 max 之间的数值,num 用来指定类型 //使用
'name|1-3': 1
运行结果:生成一个 1-3 之间的数字。可能的结果有:1、2、3

生成带有小数点的数字。

'name|min-max.dmin-dmax': num
生成一个浮点数,整数部分介于 min 和 max 之间,小数保留 dmin 到 dmax 位。num 用来指定类型。 //使用
'num1|1-10.1-2': 1
运行结果:生成 1-10 之间的带有 1到 2 位小数的浮点数。如:2.1、3.12 等 'num2|5.1-2': 1
生成一个整数部分为 5 ,保留 1 到 2 位小数的浮点数。如:5.1、5.33、5.09 等 'num3|5.2': 1
生成整数为 5 ,保留两位小数的浮点数。如:5.11、5.67 等

1.3、属性值是 Boolean

'name|1': boolean
生成一个随机值,真 假 概率都是一半。 //使用
'isLike|1': true
生成 isLike 的值可能为 true 、false。概率是一样的。
点击并拖拽以移动
'name|min-max': value
随机生成一个布尔值,
值为 value 的概率是 min / (min + max),
值为 !value 的概率是 max / (min + max)。 //使用
'like|1-5': true
生成 true 的 概率为 1/6 。生成 false 的概率为 5/6

1.4、属性值是对象 Object

生成一个指定属性个数的对象。

'obj|num': object
从属性值 object 中,随机选取 num 个属性。 //使用
'obj|2': {
a: '1',
b: '2',
c: '3'
}
运行结果可能为:
{a: "3", b: "2"}
{c: "3", b: "2"}
{a: "3", c: "2"}

生成一个属性个数随机的对象。

'obj|min-max': object
从 object 中 随机选取 min 到 max 个属性,生成一个对象。 //使用
'obj|1-2': {
a: '1',
b: '2',
c: '3'
}
运行结果可能为:
{a: "3"}
{b: "3"}
{c: "3"}
{a: "3", b: "2"}
{c: "3", b: "2"}
{a: "3", c: "2"}

1.5、属性值是数组 Array

取数组中某个元素作为结果。

'arr|1':array
从属性值 array 中随机选取 1 个元素作为结果返回 //使用
'arr|1':[1,2,3]
运行结果为:1、2、3 三种结果

生成新数组。

'arr|min-max': array
通过重复 array 的元素生成新数组,重复次数 min 到 max 。 //使用
'arr|1-2': [ 1,2,3 ]
运行结果为:[ 1,2,3 ] 或 [ 1,2,3,1,2,3 ]
点击并拖拽以移动
'arr|num': array
通过重复 array 的元素生成新数组,重复次数 num 次 。 //使用
'arr|2': [ 1,2,3 ]
运行结果为: [ 1,2,3,1,2,3 ]

1.6、属性值是函数 Function

'name':function
function 返回值作为最终的属性值。 //使用
'name': ()=>{
return 'web learn'
}
运行结果为 web learn

在数据占位符中,属性值是函数有重要的意义。待会会重点解释。

1.7、属性值是正则 RegExp

'name': regexp
根据正则表达式 regexp 反向生成可以匹配的字符串。用于生成自定义格式的字符串 //使用
'reg': /[a-zA-Z0-9]2/
生成大小写字母和数字任意组成的长度为 2 的字符串 'reg':/\d{5,10}/
生成任意的 5 到 10 位的数字字符串

二、数据占位符定义规范

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

使用格式:

@占位符
@占位符(参数 [, 参数]) //使用
'name': "@name",
生成英文名,如:Edward Rodriguez //带有参数
'first':"@name(middle)",
生成带有中间名的英文名 。如:Ruth Paul Robinson 'name': "@cname",
生成中文名

注意:

  • 用 @ 来标识后边的字符串是标识符。
  • 占位符引用的都是 mock.Random 中的方法。
  • 如果需要扩展自定义占位符,可使用 Mock.Random.extend()。
  • 占位符也可以引用 “数据模板” 中的内容。
  • 占位符优先引用数据模板中的属性。
  • 支持相对和绝对路径。
Mock.mock('@string("number", 5)')
生成一个五位数的字符串 Mock.mock('@color')
生成随机的颜色
//等同于
Random.color()

三、使用举例

创建一个 api 接口,返回一个随机生成的数组:

export default [
{
url: "/api/list",
method: "post",
response: ({ url, body }) => {
// body 是post方法时传入的数据
// url 是请求接口,get方法时,也包含传递的参数
return {
code: 200,
message: "ok",
//生成一个数组
// 长度介于 10 到 20 之间
'list|10-20': [{
name:'@cname' //生成中文名
}]
};
}
}
]

占位符引用的都是 Mock.random 内的方法,所以我们可以把上述代码更改为:

'list|10-20': [{
name:Random.cname() //生成中文名
}]

此时我们再查阅的时候,就发现生成的数组内,名字都是一模一样的。如果我们想生成不一样的姓名,该如何解决呢?

解决办法:把属性值更改为函数,将函数的返回值作为最终结果。

'list|10-20': [{
name:()=>{
Random.cname()
}
}]


好了小编今天的文章就到此结束了,喜欢我的可以点个关注哦!

玩转 Mockjs,前端也能跑的很溜的更多相关文章

  1. 玩转【Mock.js】,前端也能跑的很溜

    现在开发已经是前后端分离了,前端和后端可以同时进行开发,互不影响,但是有些时候后端开发的接口慢于前端,导致前端需要等待后端的接口完成才能完成前后端对接,为了解决这个痛点,出现了模拟接口数据的方案,目前 ...

  2. 玩vue+mockjs

    玩vue+mockjs vue中用mock制造模拟接口(本文主要解决坑),一定要看完哦 最近新入职一家公司,后端造接口速度很慢,想来想去还是搞一套模拟接口,来满足开发需求,有人会问,我造一个死数据不就 ...

  3. 专访探探DBA张文升:PG在互联网应用中同样也跑的很欢畅

    张文升认为,PG无论在可靠性和性能方面都不输其它任何关系型数据库   张文升,探探DBA,负责探探的数据库架构.运维和调优的工作.拥有8年开发经验,曾任去哪儿网DBA.   9月24日,张文升将参加在 ...

  4. Mockjs 前端接口数据模拟

    在前后端分离的项目中,通常需要启动一个后台服务器来配合前端项目的接口需求.Mockjs的作用是拦截ajax请求并模拟各种数据返回,让前端开发可以更加自由独立. 安装 npm install mockj ...

  5. 掌握这两个技术点,你可以玩转AppCan前端开发

    “AppCan的前端开发其实非常简单,只要掌握两方面的技术即可.一方面是会使用栅格布局完成UI的界面排版,另外一方面就是使用AppCan MVVM模型来完成整个页面构造和用户操作逻辑.” 在2016A ...

  6. 记作为前端开发人员跑去面试C#.NET

    先谈结果,"秦总",与我面试讨论一个半小时,十分感动,然后拒绝了我. 本月17日16时许,收到邀请,于18日9时到司面试,虽如今仅深入前端领域,皆因曾有1年ASP.NET(C#)的 ...

  7. 重建中国.NET生态系统

    Neuzilla官方微信公众号:搜 架构师联盟 或 neuzilla 我是.NET铁杆粉丝,所以如果你要在评论里跟我撕逼.NET怎么怎么烂,Java.C++.PHP.JavaScript怎么怎么好,我 ...

  8. iOS程序崩溃*** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [37.5 nan]'

    今天上班打开昨天的程序运行,昨天跑的很溜的程序今天竟然crash了,好郁闷啊!下面附上crash的栈打印信息: 经过一番调试终于找到了原因,程序crash是因为CALayer的位置中含有不存在的数,就 ...

  9. tomcat jdbc pool

    文中内容主要转自:http://www.open-open.com/lib/view/open1327478028639.html http://www.open-open.com/lib/view/ ...

随机推荐

  1. [atAGC046F]Forbidden Tournament

    称满足第1个条件的图为竞赛图,先来分析竞赛图 结论1:竞赛图点集上的导出子图也为竞赛图(证明略) 结论2:对于一张竞赛图,若不含有3元环,则该图为DAG 证明:反证法,若其不为DAG,设最小的简单环为 ...

  2. [loj3272]汉堡肉

    当$k\le 3$,这是一个经典的问题 设所有矩形左下角横纵坐标的最大值为$(x_{1},y_{1})$,右上角横纵坐标的最小值为$(x_{2},y_{2})$,那么必然存在一组合法解满足其中一点为$ ...

  3. 第08章 MySQL聚合函数

    第08章 MySQL聚合函数 我们上一章讲到了 SQL 单行函数.实际上 SQL 函数还有一类,叫做聚合(或聚集.分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值. 1 ...

  4. 架构师必备:巧用Canal实现异步、解耦的架构

    本文介绍如何应用Canal实现异步.解耦的架构,后续有空再写文章分析Canal原理和源代码. Canal简介 Canal是用来获取数据库变更的中间件. 伪装自己为MySQL从库,拉取主库binlog并 ...

  5. CF1418G Three Occurrences

    统计满足某些性质的区间个数. 我们考虑移动 \(r\) 指针. 然后考虑把不能选的区间 \(ban\)掉. 具体看下细节吧. #include<iostream> #include< ...

  6. 洛谷 P4062 - [Code+#1]Yazid 的新生舞会(权值线段树)

    题面传送门 题意: 给出一个序列 \(a\),求 \(a\) 有多少个子区间 \([l,r]\),满足这个区间中出现次数最多的数出现次数 \(>\dfrac{r-l+1}{2}\) \(1 \l ...

  7. Redis高并发处理常见问题及解决方案

    1. 大型电商系统高流量系统设计 场景: 大量电商系统每天要处理上亿请求,其中大量请求来自商品访问.下单.商品的详情是时刻变化,由于请求量过大,不会频繁去服务端获取商品信息,导致服务器压力极大.需要用 ...

  8. Oracle-怎么在表的特定位置增加列

    create table tmp as select ID,UserName,RealName,Sex,Tel,Addr from tabName;drop table tabName;rename ...

  9. 23-Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...

  10. 修复UE4编辑器,ClearLog操作导致的崩溃

    UE4 4.24.3版本,编辑器Output Log窗口中,右键--Clear Log操作很大概率会导致编辑器奔溃:解决办法: 相关文件: Engine\Source\Developer\Output ...