前言

使用mockjs可以事先模拟数据,前提是和后端约定好了数据接口,怎样的数据。使用mock就可以生成你要的数据了,从而实现开发时前后端分离。

其主要功能是:

  • 基于数据模板生成模拟数据。
  • 基于HTML模板生成模拟数据。
  • 拦截并模拟 ajax 请求。

语法规范

Mock.js 的语法规范包括两部分:

  1. 数据模板定义规范(Data Template Definition,DTD)
  2. 数据占位符定义规范(Data Placeholder Definition,DPD)

数据模板定义规范 DTD

数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:

  1. // 属性名 name
  2. // 生成规则 rule
  3. // 属性值 value
  4. '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
  • 生成规则 的 含义 需要依赖 属性值的类型 才能确定。
  • 属性值 中可以含有 @占位符
  • 属性值 还指定了最终值的初始值和类型。

例1:

  1. Mock.mock({
  2. 'number1|1-100.1-10': 1,
  3. 'number2|123.1-10': 1,
  4. 'number3|123.3': 1,
  5. 'number4|123.10': 1.123
  6. })
  7. // =>
  8. {
  9. "number1": 12.92,
  10. "number2": 123.51,
  11. "number3": 123.777,
  12. "number4": 123.1231091814
  13. }

例2:根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串:

  1. Mock.mock({
  2. 'regexp1': /[a-z][A-Z][0-9]/,
  3. 'regexp2': /\w\W\s\S\d\D/,
  4. 'regexp3': /\d{5,10}/
  5. })
  6. // =>
  7. {
  8. "regexp1": "pJ7",
  9. "regexp2": "F)\fp1G",
  10. "regexp3": "561659409"
  11. }

例3:

  1. //string表示属性名
  2. //3表示后面属性值重复次数
  3. Mock.mock({
  4. "string|3": "★"
  5. })

结果:

  1. //星星数量为3
  2. {
  3. "string": "★★★"
  4. }

例4:

  1. // num为属性名
  2. // 生成一个大于等于1,小于等于100 的整数,属性值100只是用来确定类型
  3. Mock.mock({
  4. "num|1-100": 100
  5. })

结果:

  1. {
  2. "number": 8
  3. }

数据占位符定义规范 DPD

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

占位符 的格式为:

  1. @占位符
  2. @占位符(参数 [, 参数])

注意:

  1. @ 来标识其后的字符串是 占位符
  2. 占位符 引用的是 Mock.Random 中的方法。
  3. 通过 Mock.Random.extend() 来扩展自定义占位符。
  4. 占位符 也可以引用 数据模板 中的属性。
  5. 占位符 会优先引用 数据模板 中的属性。
  6. 占位符 支持 相对路径绝对路径
  1. Mock.mock({
  2. name: {
  3. first: '@FIRST',
  4. middle: '@FIRST',
  5. last: '@LAST',
  6. full: '@first @middle @last'
  7. }
  8. })
  9. // =>
  10. {
  11. "name": {
  12. "first": "Charles",
  13. "middle": "Brenda",
  14. "last": "Lopez",
  15. "full": "Charles Brenda Lopez"
  16. }
  17. }

通过jQuery ajax请求假数据例子

1.首先,引入mockjs,引入jquery(此处用jq封装好的ajax发送请求)

  1. <script type="text/javascript" src="js/jquery-1.11.3.min.js"></script>
    <script src="http://mockjs.com/dist/mock.js"></script>

2.使用mock生成数据模板

  1. //这里的第一个参数http://api.cn 就是下面ajax请求的url,mock对该url进行拦截'
  2. //这里的第二个参数就是template数据模板,mock会返回模板生成的数据
  3. Mock.mock('http://api.cn', {
  4. 'name': '@name',
  5. 'age|1-100': 100,
  6. 'city': '@city'
  7. });

3.ajax发送请求与结果

  1. $.ajax({
  2. url: 'http://api.cn',
  3. dataType: 'json'
  4. }).done(function(data, status, xhr) {
  5. console.log( JSON.stringify(data)); //{"name":"Mark Lee","age":4,"city":"辽阳市"}
  6. });

vuecli中使用mockjs

首先安装

  1. npm install mockjs

我的项目src下的结构如下:

我在scripts中新建了一个mockdata.js

里面的内容如下:

  1. import Mock from 'mockjs';
  2. const data = Mock.mock({
  3. // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
  4. 'foods|10-50': [{
  5. 'name': "@ctitle(2,10)",
  6. "img": "@image('600x600',#b7ef7c)",
  7. "brief": "@csentence(1,50)",
  8. "price|0-20.0-2": 1,
  9. "num": 0,
  10. "minusFlag": true,
  11. "time": "@time",
  12. "peisongfei|0-100.0-2": 1,
  13. "limit|0-50": 1
  14. }],
  15. "sales|10-50": [{
  16. // 属性 id 是一个自增数,起始值为 1,每次增 1
  17. 'name': "@ctitle(2,10)",
  18. "img": "@image('600x600',#b7ef7c)",
  19. "brief": "@csentence(1,50)",
  20. "price|0-100.0-2": 1,
  21. "num": 0,
  22. "minusFlag": true,
  23. "time": "@time",
  24. "peisongfei|0-100.0-2": 1,
  25. "limit|0-100": 1
  26. }]
  27. });
  28.  
  29. export default {
  30. data
  31. }

接下来,在需要用到的mock数据的vue组件页面中,这样写

  1. import mockdata from "@/scripts/mockdata.js";

引用数据,在你methods里面 直接引用刚刚的mockdata即可。例如:

  1. new Promise((resolve, reject) => {
  2. that.foods =mockdata.data.foods; //直接点出你生成的假数据对象即可
  3. that.foodsListLen = that.foods.length;
  4. }).catch(err=>{
  5. console.log(err)
  6. })

参考

官网地址:https://github.com/nuysoft/Mock/wiki

vue+vuecli+webpack中使用mockjs模拟后端数据的更多相关文章

  1. 如何在vue-cli项目中结合mockjs模拟假数据

    1.前言 在如今前后端分离的开发方式已被广泛采用的今天,前端同学和后端同学各自独立开发,后端提供数据接口,前端调用接口获取数据渲染页面.但是在实际开发中,后端开发由于逻辑相对复杂接口迟迟提供不到位,而 ...

  2. 在Vue的webpack中结合runder函数

    在Vue的webpack中结合runder函数 1.引入: <h1>下面是vue的内容:</h1> <div id="app"> <log ...

  3. Charles——前端必备模拟后端数据

    Charles--前端必备模拟后端数据 现在都是前后端分离开发了,前端开发者经常会遇到一个问题如何模拟后端数据来进行开发调试,在这里给大家介绍一个前端神器--Charles. 安装 安装就不赘述了,直 ...

  4. vue项目中使用mockjs模拟接口返回数据

    Mock.js 是一个模拟数据生成器,利用它,可以拦截ajax请求,直接模拟返回数据,这样前后端只要约定好数据格式,前端就不需要依赖后端的接口,可以直接使用模拟的数据了. 网上介绍mock的教程也较多 ...

  5. 如何在Vue中使用Mockjs模拟数据的增删查改

    之前一直使用json-server在前端开发时,搭建本地数据接口测试,但有时又需要将做好的项目放于 github page上做项目演示.在本地时,json server很好使用,但一旦放在github ...

  6. VUE + vue-cli + webpack 创建新项目

    首先记录一下命令. 这是一个睿智新手的笔记. p.s.这是配置好环境以后的命令. ----------------------------------------------- $ npm insta ...

  7. vue-cli项目中使用mockjs(基础使用和全局配置使用)

    参考:vue+mockjs 模拟数据,实现前后端分离开发 (Github-Demo可查看全部代码),Mockjs ,Axios 很多时候前后端分离的项目在开发过程中前端所需数据和后端接口并不会同步开发 ...

  8. 使用mockjs模拟后端返回的json数据;

    前后端分离开发中最重要的一部就是前后端联调,很多时候后端进度是跟不上前端的,所以需要前端模拟一些数据进行调试,这样前端的进度就可以加快了.后端的小哥哥别打我: 使用mockjs可以很方便的模拟出想要的 ...

  9. Vue在MVC中的进行前后端的交互

    Vue在MVC中的进行前后端的交互 Preface: 由于最近在研究前端相关的技术,作为前端非常优秀的框架Vue,个人在学习的过程中遇到一些问题,网上相关资料有限,所以在这这里总结一下个人使用Vue的 ...

随机推荐

  1. 在react中使用less(官方做法)

    概述 在用create-react-app搭建react app的时候,原生并不支持less,只支持css.不过create-react-app官方给了一种方法使用less,我觉得很有用,记录下来,供 ...

  2. 一份从0到1的java项目实践清单

    虽说工作就是简单的事情重复做,但不是所有简单的事你都能有机会做的. 我们平日工作里,大部分时候都是在做修修补补的工作,而这也是非常重要的.做好修补工作,做好优化工作,足够让你升职加薪! 但是如果有机会 ...

  3. Linux服务器开机自动启动服务或脚本的方法

    由于种种原因我们需要重启服务器或断电重启,服务都得手动一个一个启动太过麻烦,所以专门了解开机自启脚本的设置方法. 方式一: 直接在脚本/etc/rc.d/rc.local(和/etc/rc.local ...

  4. mybatis foreach报错It was either not specified and/or could not be found for the javaType Type handler

    或许是惯性思维,在mybatis使用foreach循环调用的时候,很多时候都是传一个对象,传一个List的情况很少,所以写代码有时候会不注意就用惯性思维方法做了. 今天向sql传参,传了一个List作 ...

  5. Hashtable 为什么不叫 HashTable?

    前几天在写<HashMap 和 Hashtable 的 6 个区别>这篇文章的时候,差点把 Hashtable 写成了 HashTable,后来看源码证实了是:Hashtable,小写的 ...

  6. 新装mysql数据库登陆不上去(账号密码正确)

    Open & Edit /etc/my.cnf Add skip-grant-tables under [mysqld] Restart Mysql You should be able to ...

  7. web.xml配置web中的key points(下)

    一.配置jsp页面 [jsp-config]中有两个子元素[taglib][jsp-property-group],注意,前者必须出现在后者之前. ①[taglib]替代jsp页面中taglib指令 ...

  8. centos 7 linux 安装与卸载 jdk 7

    一.声明 本文采用操作系统版本: Centos 7 Linux 系统 版本源:CentOS-7-x86_64-DVD-1708.iso 官网下载地址:http://isoredirect.centos ...

  9. 菜鸟系列docker——docker镜像上(3)

    1. 镜像image 镜像和容器的关系就和安装包和程序的关系一样,有了镜像才可以启动容器,容器是镜像的一个运行实例. 1.1 镜像的结构 通过第二节仓库,可能很多看官已经查看到镜像是分层的,接下来将对 ...

  10. Kubernetes 弹性伸缩全场景解析 (一)- 概念延伸与组件布局

    传统弹性伸缩的困境 弹性伸缩是Kubernetes中被大家关注的一大亮点,在讨论相关的组件和实现方案之前.首先想先给大家扩充下弹性伸缩的边界与定义,传统意义上来讲,弹性伸缩主要解决的问题是容量规划与实 ...