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 SocialHistory 检查访问者是否访问过某站点
Aug 02 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
Dec 10 Javascript
基于jquery实现发送文章到手机的代码
Dec 26 Javascript
Web表单提交之disabled问题js解决方法
Jan 13 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
May 13 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
Jul 28 Javascript
老生常谈JavaScript中的this关键字
Oct 01 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
Sep 03 Javascript
nvm、nrm、npm 安装和使用详解(小结)
Jan 17 Javascript
JS集合set类的实现与使用方法示例
Feb 01 Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 Javascript
JS高级程序设计之class继承重点详解
Jul 07 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
最令PHP初学者头痛的十四个问题
2006/07/12 PHP
php变量范围介绍
2012/10/15 PHP
php使用qr生成二维码的示例分享
2014/01/20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
PDO::getAttribute讲解
2019/01/28 PHP
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
JavaScript中的Math.LN2属性用法详解
2015/06/12 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
Python字符串处理实例详解
2017/05/18 Python
Django入门使用示例
2017/12/12 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
自我评价的正确写法
2013/09/19 职场文书
营销与策划应届生求职信
2013/11/04 职场文书
上班睡觉检讨书
2014/01/09 职场文书
2014年高三毕业生自我评价
2014/01/11 职场文书
法制宣传日活动总结
2014/04/29 职场文书
领导班子自我剖析材料
2014/08/16 职场文书
工作检讨书怎么写
2014/10/10 职场文书
2014年英语工作总结
2014/12/20 职场文书
2015年市场部工作总结
2015/04/30 职场文书
MySQL Router的安装部署
2021/04/24 MySQL