摘要:若需要傳參,傳第二個(gè)參數(shù)不接受多個(gè)參數(shù)的傳入,最多只接收兩個(gè)參數(shù)請(qǐng)求數(shù)據(jù)目前,通過(guò)以上步驟,我們獨(dú)立的構(gòu)建了模擬數(shù)據(jù)和狀態(tài)管理,但還沒有將它們結(jié)合起來(lái)。驗(yàn)證如果你想驗(yàn)證寫出來(lái)的模擬數(shù)據(jù)是否正確,可以在示例頁(yè)打開控制臺(tái),直接運(yùn)行。
關(guān)于模擬數(shù)據(jù),這里使用Mock.js這個(gè)庫(kù),關(guān)于用法,官網(wǎng)說(shuō)的也比較詳細(xì),這里我就簡(jiǎn)單的帶一下。
列表數(shù)據(jù)我們先將項(xiàng)目中src/components/HelloWorld.vue刪除,將src/router/index.js作如下修改:
import Vue from "vue" import Router from "vue-router" import Index from "@/views/vacation/" Vue.use(Router) export default new Router({ routes: [ { path: "/", name: "Index", component: Index } ] })
然后,在src/views/vacation/建立index.vue:
顯示效果list view
在手機(jī)模式下,顯示效果如下:
模擬數(shù)據(jù)在項(xiàng)目根目錄下,使用命令行npm i -D mockjs;
新建src/mock/list.js:
import { mock, Random } from "mockjs"; export default mock({ "list|0-50": [ { "approveId": "@id", "applier": { "userId": "@guid", "userName": "@cname", "sectionId": "@id", "sectionName": "@ctitle", } ... } ] })
這里的"@id"(稱為“占位符”)是Random.id()的簡(jiǎn)寫形式;
這里的"@id"(稱為“占位符”)必須使用引號(hào)包裹;
這里的"@id" + 111會(huì)是將"@id"當(dāng)作字符串(返回"@id111"),不等于Random.id() + 111;
新建src/mock/index.js:
Mock.js攔截請(qǐng)求地址:
import { mock, Random } from "mockjs"; import List from "./list"; mock("/","get",()=> List);
在這里,使用Mock.mock( rurl?, rtype?, function( options ) )攔截路由請(qǐng)求的/路徑,返回模擬的List列表。
rurl:攔截路徑規(guī)則,可以是字符串"/",也可以是一個(gè)正則表達(dá)式///。
若請(qǐng)求/?id="1",mock的攔截路徑可以寫成Mock.mock(//?id="d"/,"get",()=>List);
若需要根據(jù)請(qǐng)求參數(shù)不同,返回對(duì)應(yīng)id的數(shù)據(jù),則需要自己截取url字符串作判斷了;
rtype:攔截請(qǐng)求類型,get或post;
function(options):回調(diào)函數(shù),攔截成功后的處理邏輯;
optioins = {url, type, body};
url為請(qǐng)求地址;
type為請(qǐng)求類型;
body為請(qǐng)求時(shí)傳入的數(shù)據(jù)(只在post請(qǐng)求時(shí)有用);
狀態(tài)管理這里,我們使用vuex作狀態(tài)管理,axios請(qǐng)求數(shù)據(jù):npm i -S vuex axios;
新建src/store/index.js:
import Vue from "vue"; import Vuex from "vuex"; import axios from "axios"; Vue.use(Vuex); const $setApplications = "SETAPPLICATIONS"; export default new Vuex.Store({ state: { applications: null, }, mutations: { [$setApplications]: (state, list) => state.applications = list, }, actions: { requestApplications({ commit, state }) { axios.get("/") .then(({data:{list}}) => { commit($setApplications, list); }) .catch(() => { console.log(arguments); }) } } })
在這里,state保存整個(gè)項(xiàng)目公用的狀態(tài),mutations進(jìn)行同步數(shù)據(jù)處理,actions處理異步請(qǐng)求。
mutations是唯一修改state的入口,actions要想修改state,需要內(nèi)部調(diào)用一下mutations;
在項(xiàng)目程序中,通過(guò)this.$store.commit("SETAPPLICATIONS",null)修改state的值。
若要傳多個(gè)值,第二個(gè)參數(shù)為一個(gè)對(duì)象(不接受多個(gè)參數(shù)的傳入,最多只接收兩個(gè)參數(shù));
在項(xiàng)目中,通過(guò)this.$store.dispatch("requestApplications")調(diào)用一個(gè)異步請(qǐng)求。
若需要傳參,傳第二個(gè)參數(shù)(不接受多個(gè)參數(shù)的傳入,最多只接收兩個(gè)參數(shù));
請(qǐng)求數(shù)據(jù)目前,通過(guò)以上步驟,我們獨(dú)立的構(gòu)建了模擬數(shù)據(jù)和狀態(tài)管理,但還沒有將它們結(jié)合起來(lái)。
src/main.js中添加import "./mock"、import store from "./store",且修改:
new Vue({ el: "#app", router, store, components: { App }, template: "" })
結(jié)束了?
還沒有,我們還要獲取數(shù)據(jù):
在src/views/vacation/index.vue中添加:
觸發(fā)請(qǐng)求。
請(qǐng)求結(jié)果 Mock.js用法如果想了解Mock.js的用法,推薦看官網(wǎng)的"文檔"頁(yè),而不是"示例"頁(yè)。
Mock.js返回的數(shù)據(jù)格式都是對(duì)象,如果想獲取其它格式(如數(shù)組...)需要自己另辟蹊徑了。
規(guī)則格式:
Mock.mock({ // 初始化對(duì)象,也是輸出的對(duì)象; })
語(yǔ)法規(guī)范:
數(shù)據(jù)模板中的每個(gè)屬性由 3 部分構(gòu)成:屬性名、生成規(guī)則、屬性值:// 屬性名 name
// 生成規(guī)則 rule
// 屬性值 value
"name|rule": value
屬性名 和 生成規(guī)則 之間用豎線 | 分隔(千萬(wàn)不要帶空格吖,否則,你的屬性名可能會(huì)包含空格)。驗(yàn)證
生成規(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ī)則 的 含義 需要依賴 屬性值的類型 才能確定。
屬性值 中可以含有 @占位符。
屬性值 還指定了最終值的初始值和類型。
如果你想驗(yàn)證寫出來(lái)的模擬數(shù)據(jù)是否正確,可以在“示例”頁(yè)打開控制臺(tái),直接運(yùn)行。
Mock.mock({ "list|1-10":[ Random.id(), ] })測(cè)試結(jié)果 vue-devtools
安裝地址
使用提醒$vm0指向某一組件實(shí)例,該實(shí)例必須打開控制臺(tái)的VueTab頁(yè),點(diǎn)擊某一組件時(shí)才能獲取到,否則,匯報(bào)$vm0未定義。
點(diǎn)擊哪個(gè)組件,$vm0指向哪個(gè)組件,才能獲取到該組件上的屬性。
章節(jié)回顧知道如何模擬數(shù)據(jù)了吧,接下來(lái)我要偷偷的模擬列表的數(shù)據(jù)了呢,你也不要忘了。
如何使用Mock.js攔截請(qǐng)求呢,如何獲得請(qǐng)求時(shí)的數(shù)據(jù)呢?
如何通過(guò)axios請(qǐng)求數(shù)據(jù)呢,它和mutations有何區(qū)別?
思考懶貨一枚,選擇第三方列表庫(kù),如何在Vue項(xiàng)目中使用呢?
相關(guān)的官方文檔MockJS使用文檔
MockJS示例(可通過(guò)控制臺(tái)測(cè)試)
Vuex官網(wǎng)
番外Vue-router用法
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/96620.html
摘要:頁(yè)面布局頁(yè)面整體布局分上中下上下部門導(dǎo)航欄,每個(gè)頁(yè)面所共有頁(yè)面的主體,隨內(nèi)容可滾動(dòng)欄,頁(yè)面可選,有的有,有的無(wú)可分離組件日期組件審批流組件列表組件可分離的工具庫(kù)申請(qǐng)單類型事假病假年假對(duì)應(yīng)數(shù)據(jù)類型應(yīng)該為,需要一個(gè)轉(zhuǎn)換為對(duì)應(yīng)的方法申請(qǐng)單狀 頁(yè)面布局 showImg(https://segmentfault.com/img/bVbeCjT?w=663&h=451); App頁(yè)面整體布局分...
摘要:目前,我們還沒有創(chuàng)建項(xiàng)目,進(jìn)入預(yù)期項(xiàng)目目錄的上一級(jí)文件目錄下即可。使用腳手架初始化項(xiàng)目最后一個(gè)為項(xiàng)目名稱,可以自定義其它名稱。 本章以下命令都是在cmd命令行中進(jìn)行的。 安裝命令行 npm i -g vue-cli 安裝完成后,輸入vue -V返回版本號(hào),即安裝成功; 初始化項(xiàng)目 切換到項(xiàng)目目錄下 項(xiàng)目目錄,即項(xiàng)目所在目錄。 目前,我們還沒有創(chuàng)建項(xiàng)目,進(jìn)入 預(yù)期項(xiàng)目目錄 的上一級(jí)文件目...
摘要:是中的條件指令,根據(jù)返回的布爾值動(dòng)態(tài)添加或移除元素。傳值方式我是標(biāo)題需要在中定義函數(shù)傳的值為字符串,不需要前綴傳的值為非字符串?dāng)?shù)字布爾值函數(shù)數(shù)組對(duì)象,為前綴,值為表達(dá)式計(jì)算結(jié)果在程序中,如引用的值。為該組件內(nèi),元素綁定的事件處理函數(shù)。 視圖 包含內(nèi)容#NavigationBar、#TabBar、#MainContext; 為什么#NavigationBar、#TabBar分在Layou...
摘要:五六月份推薦集合查看最新的請(qǐng)點(diǎn)擊集前端最近很火的框架資源定時(shí)更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語(yǔ)。葉上初陽(yáng)乾宿雨,水面清圓,一一風(fēng)荷舉。家住吳門,久作長(zhǎng)安旅。五月漁郎相憶否。小楫輕舟,夢(mèng)入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請(qǐng)::點(diǎn)擊::集web前端最近很火的vue2框架資源;定時(shí)更新,歡迎 Star 一下。 蘇...
閱讀 2657·2021-11-24 09:38
閱讀 2659·2019-08-30 15:54
閱讀 993·2019-08-30 15:52
閱讀 1977·2019-08-30 15:44
閱讀 2773·2019-08-30 13:48
閱讀 838·2019-08-29 16:21
閱讀 1071·2019-08-29 14:03
閱讀 2264·2019-08-28 18:15