vue+vuecli+webpack中使用mockjs模擬后端數(shù)據(jù)的示例
前言
使用mockjs可以事先模擬數(shù)據(jù),前提是和后端約定好了數(shù)據(jù)接口,怎樣的數(shù)據(jù)。使用mock就可以生成你要的數(shù)據(jù)了,從而實(shí)現(xiàn)開(kāi)發(fā)時(shí)前后端分離。
其主要功能是:
- 基于數(shù)據(jù)模板生成模擬數(shù)據(jù)。
- 基于HTML模板生成模擬數(shù)據(jù)。
- 攔截并模擬 ajax 請(qǐng)求。
語(yǔ)法規(guī)范
Mock.js 的語(yǔ)法規(guī)范包括兩部分:
1.數(shù)據(jù)模板定義規(guī)范(Data Template Definition,DTD)
2.數(shù)據(jù)占位符定義規(guī)范(Data Placeholder Definition,DPD)
數(shù)據(jù)模板定義規(guī)范 DTD
數(shù)據(jù)模板中的每個(gè)屬性由 3 部分構(gòu)成:屬性名、生成規(guī)則、屬性值:
// 屬性名 name // 生成規(guī)則 rule // 屬性值 value 'name|rule': value
注意:
- 屬性名 和 生成規(guī)則之間 用豎線 | 分隔。
- 生成規(guī)則 是可選的。
- 生成規(guī)則 有 7 種格式:
- 'name|min-max': value
- 'name|count': value
- 'name|min-max.dmin-dmax': value
- 'name|min-max.dcount': value
- 'name|count.dmin-dmax': value
- 'name|count.dcount': value
- 'name|+step': value
- 生成規(guī)則 的 含義 需要依賴(lài) 屬性值的類(lèi)型 才能確定。
- 屬性值 中可以含有 @占位符。
- 屬性值 還指定了最終值的初始值和類(lèi)型。
例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:根據(jù)正則表達(dá)式 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表示后面屬性值重復(fù)次數(shù)
Mock.mock({
"string|3": "★"
})
結(jié)果:
//星星數(shù)量為3
{
"string": "★★★"
}
例4:
// num為屬性名
// 生成一個(gè)大于等于1,小于等于100 的整數(shù),屬性值100只是用來(lái)確定類(lèi)型
Mock.mock({
"num|1-100": 100
})
結(jié)果:
{
"number": 8
}
數(shù)據(jù)占位符定義規(guī)范 DPD
占位符 只是在屬性值字符串中占個(gè)位置,并不出現(xiàn)在最終的屬性值中。
占位符 的格式為:
@占位符
@占位符(參數(shù) [, 參數(shù)])
注意:
- 用 @ 來(lái)標(biāo)識(shí)其后的字符串是 占位符。
- 占位符 引用的是 Mock.Random 中的方法。
- 通過(guò) Mock.Random.extend() 來(lái)擴(kuò)展自定義占位符。
- 占位符 也可以引用 數(shù)據(jù)模板 中的屬性。
- 占位符 會(huì)優(yōu)先引用 數(shù)據(jù)模板 中的屬性。
- 占位符 支持 相對(duì)路徑 和 絕對(duì)路徑。
Mock.mock({
name: {
first: '@FIRST',
middle: '@FIRST',
last: '@LAST',
full: '@first @middle @last'
}
})
// =>
{
"name": {
"first": "Charles",
"middle": "Brenda",
"last": "Lopez",
"full": "Charles Brenda Lopez"
}
}
通過(guò)jQuery ajax請(qǐng)求假數(shù)據(jù)例子
1.首先,引入mockjs,引入jquery(此處用jq封裝好的ajax發(fā)送請(qǐng)求)
<script type="text/javascript" src="js/jquery-1.11.3.min.js"></script> <script src="http://mockjs.com/dist/mock.js"></script>
2.使用mock生成數(shù)據(jù)模板
//這里的第一個(gè)參數(shù)http://api.cn 就是下面ajax請(qǐng)求的url,mock對(duì)該url進(jìn)行攔截'
//這里的第二個(gè)參數(shù)就是template數(shù)據(jù)模板,mock會(huì)返回模板生成的數(shù)據(jù)
Mock.mock('http://api.cn', {
'name': '@name',
'age|1-100': 100,
'city': '@city'
});
3.ajax發(fā)送請(qǐng)求與結(jié)果
$.ajax({
url: 'http://api.cn',
dataType: 'json'
}).done(function(data, status, xhr) {
console.log( JSON.stringify(data)); //{"name":"Mark Lee","age":4,"city":"遼陽(yáng)市"}
});
vuecli中使用mockjs
首先安裝
npm install mockjs
我的項(xiàng)目src下的結(jié)構(gòu)如下:

我在scripts中新建了一個(gè)mockdata.js
里面的內(nèi)容如下:
import Mock from 'mockjs';
const data = Mock.mock({
// 屬性 list 的值是一個(gè)數(shù)組,其中含有 1 到 10 個(gè)元素
'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 是一個(gè)自增數(shù),起始值為 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
}
接下來(lái),在需要用到的mock數(shù)據(jù)的vue組件頁(yè)面中,這樣寫(xiě)
import mockdata from "@/scripts/mockdata.js";
引用數(shù)據(jù),在你methods里面 直接引用剛剛的mockdata即可。例如:
new Promise((resolve, reject) => {
that.foods =mockdata.data.foods; //直接點(diǎn)出你生成的假數(shù)據(jù)對(duì)象即可
that.foodsListLen = that.foods.length;
}).catch(err=>{
console.log(err)
})
參考
官網(wǎng)地址:https://github.com/nuysoft/Mock/wiki
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue項(xiàng)目實(shí)現(xiàn)登陸注冊(cè)效果
這篇文章主要為大家詳細(xì)介紹了vue項(xiàng)目實(shí)現(xiàn)登陸注冊(cè)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
el-form resetFields無(wú)效和validate無(wú)效的可能原因及解決方法
本文主要介紹了el-form resetFields無(wú)效和validate無(wú)效的可能原因及解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Vue實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)el-select組件的示例代碼
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)el-select組件的方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的的可以參考一下2023-02-02
vue頁(yè)面跳轉(zhuǎn)實(shí)現(xiàn)頁(yè)面緩存操作
這篇文章主要介紹了vue頁(yè)面跳轉(zhuǎn)實(shí)現(xiàn)頁(yè)面緩存操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
Vue3中進(jìn)行二維碼的生成與解碼實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Vue3中進(jìn)行二維碼的生成與解碼實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
vue子元素綁定的事件, 阻止觸發(fā)父級(jí)上的事件處理方式
這篇文章主要介紹了vue子元素綁定的事件, 阻止觸發(fā)父級(jí)上的事件處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11

