在vue中如何使用Mock.js模擬數(shù)據(jù)
讓前端攻城師獨(dú)立于后端進(jìn)行開發(fā)。
1、環(huán)境搭建
安裝
npm install mockjs
在src目錄下新建mock文件夾并創(chuàng)建index.js來(lái)使用mockjs,然后在main.js中引入這個(gè)文件。
main.js
import Vue from 'vue' import App from './App.vue' //引入模擬的數(shù)據(jù) import './mock/index.js' new Vue({ render: h => h(App), }).$mount('#app')
@mock/index.js
//引入mockjs import Mock from 'mockjs';
2、Mock 語(yǔ)法規(guī)范
Mock.js 的語(yǔ)法規(guī)范包括兩部分:
- 數(shù)據(jù)模板定義規(guī)范(Data Template Definition,DTD)
- 數(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ī)則 的 含義 需要依賴 屬性值的類型 才能確定。
- 屬性值中可以含有 `@占位符`。
- 屬性值還指定了最終值的初始值和類型。
2.1、生成規(guī)則和示例:根據(jù)屬性值的不同
屬性值是字符串 String
"name|min-max": string
通過(guò)重復(fù) string 生成一個(gè)字符串,重復(fù)次數(shù)大于等于 min,小于等于 max。
"name|count": string
通過(guò)重復(fù) string 生成一個(gè)字符串,重復(fù)次數(shù)等于 count。
屬性值是數(shù)字 Number
"name|+1": number
屬性值自動(dòng)加 1,初始值為 number。
"name|min-max": number
生成一個(gè)大于等于 min、小于等于 max 的整數(shù),屬性值 number 只是用來(lái)確定類型。
"name|min-max.dmin-dmax": number
生成一個(gè)浮點(diǎn)數(shù),整數(shù)部分大于等于 min、小于等于 max,小數(shù)部分保留 dmin 到 dmax 位
屬性值是布爾型 Boolean
"name|1": boolean
隨機(jī)生成一個(gè)布爾值,值為 true 的概率是 1/2,值為 false 的概率同樣是 1/2。
"name|min-max": value
隨機(jī)生成一個(gè)布爾值,值為 value 的概率是 min / (min + max),值為 !value 的概率是 max / (min + max)。
屬性值是對(duì)象 Object
"name|count": object
從屬性值 object 中隨機(jī)選取 count 個(gè)屬性。
"name|min-max": object
從屬性值 object 中隨機(jī)選取 min 到 max 個(gè)屬性。
屬性值是數(shù)組 Array
"name|1": array
從屬性值 array 中隨機(jī)選取 1 個(gè)元素,作為最終值。
"name|+1": array
從屬性值 array 中順序選取 1 個(gè)元素,作為最終值。
"name|min-max": array
通過(guò)重復(fù)屬性值 array 生成一個(gè)新數(shù)組,重復(fù)次數(shù)大于等于 min,小于等于 max。
"name|count": array
???????通過(guò)重復(fù)屬性值 array 生成一個(gè)新數(shù)組,重復(fù)次數(shù)為 count。
屬性值是函數(shù) Function
"name": function
???????執(zhí)行函數(shù) function,取其返回值作為最終的屬性值,函數(shù)的上下文為屬性 'name' 所在的對(duì)象。
屬性值是正則表達(dá)式 RegExp
'name': regexp
根據(jù)正則表達(dá)式 regexp 反向生成可以匹配它的字符串。用于生成自定義格式的字符串
數(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({ //這里的email、phone、last等都是在Mock.Rndom里的方法 name: { //@是語(yǔ)法糖,不使用@ 就需要 Mock.Rndom.email() first: '@email', middle: '@phone', last: '@LAST', full: '@first @middle @last' } })
2.2、發(fā)送get請(qǐng)求
@mock/index.js
//引入mockjs import Mock from 'mockjs'; //get請(qǐng)求 //書寫模擬數(shù)據(jù) let userInfo = Mock.mock({ //屬性名 | 生成規(guī)則 : 屬性值 "userInfo|5-10": [ { "id|+1": 1, //關(guān)于屬性值@指向的 Mock.Random 中的方法,詳情可以去官方文檔 //這里屬性名沒有特殊符號(hào)啥的,所以 "name" 可簡(jiǎn)寫為 name name: "@cname()", address: "@city(true)", email: "@email(163.com)", userImg: "@image('200x100')", date: "@date(yyyy-MM-dd hh:mm:ss)", title: "@ctitle(3,5)", }, ], }); //json-server會(huì)提供給我們接口地址,mockjs需要我們自己寫 //寫接口,并提供返回值 Mock.mock("/user/list", "get", () => { return { code: 200, message: "get請(qǐng)求成功", data: userInfo, total: userInfo.length, }; });
//如果自己生成數(shù)據(jù),可以直接寫,提供一個(gè)請(qǐng)求接口就行 let add = [ { "id": "1", "imgUrl": "/images/banner1.jpg" }, { "id": "2", "imgUrl": "/images/banner2.jpg" }, { "id": "3", "imgUrl": "/images/banner3.jpg" }, ] Mock.mock('/lyc', 'get', () => add)
使用模擬數(shù)據(jù)
<script> import axios from "axios"; export default { async created() { let res = await axios.get("/user/list"); console.log("get請(qǐng)求", res.data); let res1 = await axios.get("/lyc"); console.log(res1.data); }, }; </script>
2.3、發(fā)送post請(qǐng)求
//引入mockjs import Mock from 'mockjs'; let { newData } = Mock.mock({ "newData|1-3": [ { //隨機(jī)生成 2 句話 companyDescription: "@cparagraph(2)", //從屬性值 `array` 中按順序選取 1 個(gè)元素,作為最終值。 "positionTitle|+1": [ "Java開發(fā)工程師", "Python開發(fā)工程師", "前端開發(fā)工程師", "產(chǎn)品經(jīng)理", ], //從屬性值 `array` 中隨機(jī)選取 1 個(gè)元素,作為最終值。 "degree|1": ["本科", "碩士", "博士", "???], //隨機(jī)生成5個(gè)單詞 jobDescription: "@word(5)", }, ], }); Mock.mock("/api/user", "post", (data) => { console.log(data); return { status: 200, message: "post請(qǐng)求成功", data: newData, }; });
使用模擬數(shù)據(jù)
<script> import axios from "axios"; export default { async created() { let res2 = await axios.post("/api/user", { name: "帥比" }); console.log(res2); }, }; </script>
3、Mockjs配合fastmock使用
使用fastmock配合mock生成模擬數(shù)據(jù),不用做以上步驟,只需要把mock生成數(shù)據(jù)的代碼寫在接口里就行。也就是前面的都不用看,找上面的 2.1、生成規(guī)則和示例:根據(jù)屬性值的不同就行。
一些例子
- 生成隨機(jī)11位數(shù)字---手機(jī)號(hào)
phone:”@string(‘number',11)”?
- 隨機(jī)生成中文姓名
name:”@cname()”?
- 生成隨機(jī)圖片
imgUrl:”@image(‘200x200',#eee)”?
- 生成隨機(jī)句子
juzi:”@csentence()”?
- 生成隨機(jī)id
"categoryId":"@string(number,1,2)",
使用fastmock
登錄注冊(cè)后,新建項(xiàng)目后到這個(gè)頁(yè)面,點(diǎn)紅色框
把我們之前的mockjs代碼寫這,保存就行
使用模擬數(shù)據(jù)接口
//直接書寫mockjs代碼生成路徑,直接使用就行,mockjs都不用安裝 <script> import axios from "axios"; export default { async created() { let res3 = await axios.get( "https://www.fastmock.site/mock/371c1959a072aa34e8a7485e44262576/api/user" ); console.log("res3", res3.data); }, }; </script>
普通html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> </head> <body> <script> function lyc() { axios.get( "https://www.fastmock.site/mock/371c1959a072aa34e8a7485e44262576/api/user" ).then( res => { console.log(res.data); } ); } lyc() </script> </body> </html>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
uniapp模仿微信實(shí)現(xiàn)聊天界面的示例代碼
這篇文章主要介紹了如何利用uniapp模仿微信,實(shí)現(xiàn)一個(gè)聊天界面。文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Vue有一定的幫助,感興趣的可以了解一下2022-01-01vue自定義loader將行內(nèi)樣式px轉(zhuǎn)rem適配
這篇文章主要為大家介紹了vue自定義loader將行內(nèi)樣式px轉(zhuǎn)rem適配示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Vue.extend 登錄注冊(cè)模態(tài)框的實(shí)現(xiàn)
這篇文章主要介紹了Vue.extend 登錄注冊(cè)模態(tài)框的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Vue中this.$refs獲取為undefined的原因和解決辦法(this.$refs.屬性為undefined原因
在Vue項(xiàng)目開發(fā)中,使用this.$refs訪問(wèn)組件或DOM元素的引用時(shí),可能會(huì)遇到獲取為undefined的情況,這篇文章主要介紹了Vue中this.$refs獲取為undefined的原因和解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-11-11Vue前端項(xiàng)目部署IIS的實(shí)現(xiàn)
這篇文章主要介紹了Vue前端項(xiàng)目部署IIS的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01Vant picker選擇器設(shè)置默認(rèn)值導(dǎo)致選擇器失效的解決
這篇文章主要介紹了Vant picker選擇器設(shè)置默認(rèn)值導(dǎo)致選擇器失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01axios對(duì)請(qǐng)求各種異常情況處理的封裝方法
今天小編就為大家分享一篇axios對(duì)請(qǐng)求各種異常情況處理的封裝方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09vue $attrs和$listeners的使用與區(qū)別
本文主要介紹了vue $attrs和$listeners的使用與區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02