vue+vuecli+webpack中使用mockjs模拟后端数据的示例


Posted in Javascript onOctober 24, 2017

前言

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

其主要功能是:

  1. 基于数据模板生成模拟数据。
  2. 基于HTML模板生成模拟数据。
  3. 拦截并模拟 ajax 请求。

语法规范

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

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

数据模板定义规范 DTD

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

// 属性名  name
// 生成规则 rule
// 属性值  value
'name|rule': value

注意:

  1. 属性名 和 生成规则之间 用竖线 | 分隔。
  2. 生成规则 是可选的。
  3. 生成规则 有 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
  4. 生成规则 的 含义 需要依赖 属性值的类型 才能确定。
  5. 属性值 中可以含有 @占位符。
  6. 属性值 还指定了最终值的初始值和类型。

例1:

Mock.mock({
  'number1|1-100.1-10': 1,
  'number2|123.1-10': 1,
  'number3|123.3': 1,
  'number4|123.10': 1.123
})
// =>
{
  "number1": 12.92,
  "number2": 123.51,
  "number3": 123.777,
  "number4": 123.1231091814
}

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

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

例3:

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

结果:

//星星数量为3
{
  "string": "★★★"
}

例4:

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

结果:

{
  "number": 8
}

数据占位符定义规范 DPD

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

占位符 的格式为:

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

注意:

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

通过jQuery ajax请求假数据例子

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

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

2.使用mock生成数据模板

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

3.ajax发送请求与结果

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

vuecli中使用mockjs

首先安装

npm install mockjs

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

vue+vuecli+webpack中使用mockjs模拟后端数据的示例

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

里面的内容如下:

import Mock from 'mockjs';
const data = Mock.mock({
 // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
 'foods|10-50': [{
  'name': "@ctitle(2,10)",
  "img": "@image('600x600',#b7ef7c)",
  "brief": "@csentence(1,50)",
  "price|0-20.0-2": 1,
  "num": 0,
  "minusFlag": true,
  "time": "@time",
  "peisongfei|0-100.0-2": 1,
  "limit|0-50": 1
 }],
 "sales|10-50": [{
  // 属性 id 是一个自增数,起始值为 1,每次增 1
  'name': "@ctitle(2,10)",
  "img": "@image('600x600',#b7ef7c)",
  "brief": "@csentence(1,50)",
  "price|0-100.0-2": 1,
  "num": 0,
  "minusFlag": true,
  "time": "@time",
  "peisongfei|0-100.0-2": 1,
  "limit|0-100": 1
 }]
});

export default {
 data
}

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

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

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

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

参考

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript编程起步(第二课)
Feb 27 Javascript
在VS2008中使用jQuery智能感应的方法
Dec 30 Javascript
JQuery插件开发示例代码
Nov 06 Javascript
jQuery检查事件是否触发的方法
Jun 26 Javascript
jQuery简单验证上传文件大小及类型的方法
Jun 02 Javascript
js微信支付实现代码
Dec 22 Javascript
JavaScript中数据类型转换总结
Dec 25 Javascript
手动下载Chrome并解决puppeteer无法使用问题
Nov 12 Javascript
js取小数点后两位四种方法
Jan 18 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
Sep 21 Javascript
javascript实现贪吃蛇经典游戏
Apr 10 Javascript
js实现简单的轮播图效果
Dec 13 Javascript
React Native AsyncStorage本地存储工具类
Oct 24 #Javascript
React Native验证码倒计时工具类分享
Oct 24 #Javascript
详解vue + vuex + directives实现权限按钮的思路
Oct 24 #Javascript
React Native实现地址挑选器功能
Oct 24 #Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
Oct 24 #Javascript
React Native 通告消息竖向轮播组件的封装
Aug 25 #Javascript
Vue v2.5 调整和更新不完全问题
Oct 24 #Javascript
You might like
动易数据转成dedecms的php程序
2007/04/07 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
初步探究Python程序的执行原理
2015/04/11 Python
Python实现的rsa加密算法详解
2018/01/24 Python
django中模板的html自动转意方法
2018/05/27 Python
python实现人民币大写转换
2018/06/20 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
python datetime处理时间小结
2020/04/16 Python
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
统计员岗位职责
2013/11/14 职场文书
渔夫的故事教学反思
2014/02/14 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
教师党员整改措施
2014/10/24 职场文书
西湖英语导游词
2015/02/06 职场文书
大学同学聚会感言
2015/07/30 职场文书
AJAX学习笔记
2021/05/18 Javascript
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android