摘要:做項目過程中,需要用到后臺模擬數據,在機緣巧合下發現了,在學習使用的過程中又偶遇了。
做項目過程中,需要用到后臺模擬數據,在機緣巧合下發現了mock,在學習使用的過程中又偶遇了axios-mock-adapter。現在將實例展示如下:
準備
實例是建立在vue-cli的基礎上實現
需要提前安裝的插件有:
axios:npm install axio --save
mockjs:npm install mockjd --save-dev
axios-mock-adapter:npm install axios-mock-adapter --save-dev
引入
第一種引入方式:按照es6的語法,以import的方式引入
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
第二種引入方式:以require方式引入
var axios = require("axios");
var MockAdapter = require("axios-mock-adapter");
代碼實例
整個項目的代碼結構如下:
首先新建一個login.vue文件,代碼如下
Login
記住密碼 login reset
由于路由的默認指向是HelloWorld,所以修改router文件夾下的index.js
import Vue from "vue" import Router from "vue-router" // 懶加載方式,當路由被訪問的時候才加載對應組件 const Login = resolve => require(["@/components/Login"], resolve) Vue.use(Router) export default new Router({ routes: [{ path: "/", name: "login", component: Login }]
此時登錄界面樣式基本寫好,接下來修改main.js,將需要引入的文件引入
如下:
import Vue from "vue" import App from "./App" import router from "./router" import ElementUI from "element-ui" import "element-ui/lib/theme-chalk/index.css" import axios from "axios" Vue.prototype.$ajax = axios // axios不能直接使用use引入,只能每個需要發送請求的組件中即時引入,兩種引入方式 // 第一種引入方式:引入axios后,修改原型鏈 // import axios from "axios" // Vue.prototype.$axios = axios Vue.config.productionTip = false; Vue.use(ElementUI); /* eslint-disable no-new */ new Vue({ el: "#app", router, store, // 使用store components: { App }, template: "" })
刷新頁面
接下來就是對login.vue頁面進行改造:增加登錄點擊事件和重置事件
login reset
此時的點擊事件沒有交互功能,使用axios和mock.js實現交互,并且使用axios-mock-adapter進行axios數據調試
在src下新建一個axios文件夾,并建一個api.js
import axios from "axios" axios.defaults.baseURL = "http://127.0.0.1:80"; export const requseLogin = params => { return axios.post("/user/login", params); }
再新建一個index.js
import * as api from "./api" export default api
這是像后臺發起post請求,地址是‘user/login’
此處的后臺數據我們使用mockjs進行攔截,然后模擬后臺服務返回的數據
創建mock后臺模擬數據
在src目錄下創建mock文件夾,并且新建一個index.js,index.js內容如下:、
// 通過axios-mock-adapter生成代理api地址 import axios from "axios" import MockAdapter from "axios-mock-adapter" // import { LoginUsers } from "./data/user" import {users} from "./data/user" export default { init() { let mock = new MockAdapter(axios); // mock success request 模擬成功請求 mock.onGet("/success").reply(200, { msg: "success" }); // mock error request 模擬失敗請求 mock.onGet("/error").reply(500, { msg: "failure" }) // login 模擬登錄接口 mock.onPost("/user/login").reply(config => { // 解析axios傳過來的數據 let { username, password } = JSON.parse(config.data); return new Promise((resolve, reject) => { // 先創建一個用戶為空對象 let user = null; setTimeout(() => { // 判斷模擬的假數據中是否有和傳過來的數據匹配的 let hasUser = users.some(person => { // 如果存在這樣的數據 if (person.username === username && person.password === password) { user = JSON.parse(JSON.stringify(person)); user.password = undefined; return true; }else { // 如果沒有這個person return false } }); // 如果有那么一個人 if (hasUser) { resolve([ 200, {code: 200, msg: "登錄成功",user} ]); } else { // 如果沒有這么一個人 resolve([ 200, {code: 500, msg: "賬號錯誤" }]) } }, 500); }) }); // 模擬注冊接口 } }
接著在mock下建立data文件夾,;里面新建user.js用來存放用戶信息
/* * 用來存放一些模擬用戶的數據 * */ // import Mock from "mockjs" const users = [ { id: 1, username: "admin", password: "123456", email: "123456@qq.com", name: "搬磚者" }, { id: 2, username: "lytton", password: "123456", email: "yyyyy@163.com", name: "混子" } ] export { users }
為login.vue文件增加登錄方法
當點擊登錄按鈕后,跳轉到‘/home’頁面,在components文件夾下面新增home.vue文件
{{ msg }}
接下了修改router中的index.js
import Vue from "vue" import Router from "vue-router" // import HelloWorld from "@/components/HelloWorld" // import Home from "../components/home"; // 懶加載方式,當路由被訪問的時候才加載對應組件 const Login = resolve => require(["@/components/Login"], resolve) const Home = resolve => require(["@/components/home"], resolve) Vue.use(Router) const router = new Router({ routes: [ { path: "/", name: "login", component: Login }, { path: "/login", name: "login", component: Login }, { path: "/home", name: "home", component: Home } ] }) // 訪問之前,檢查是否登陸了 router.beforeEach((to, from, next) => { if(to.path.startsWith("/login")) { window.sessionStorage.removeItem("user"); next() }else { let token = window.sessionStorage.getItem("user"); if (!token) { next({path: "/login"}) }else { next() } } }); export default router
在main.js中引入mock
import Vue from "vue" import App from "./App" import router from "./router" //創建Vuex的store,使用分離store的方法,引入vuex import store from "./store" import ElementUI from "element-ui" import "element-ui/lib/theme-chalk/index.css" import Mock from "./mock/index" Mock.init() import axios from "axios" Vue.prototype.$ajax = axios // axios不能直接使用use引入,只能每個需要發送請求的組件中即時引入,兩種引入方式 // 第一種引入方式:引入axios后,修改原型鏈 // import axios from "axios" // Vue.prototype.$axios = axios Vue.config.productionTip = false; Vue.use(ElementUI); /* eslint-disable no-new */ new Vue({ el: "#app", router, store, // 使用store components: { App }, template: "" })
至此,運行npm run dev即可
文章結合了以下博客的內容而成:
鏈接描述
鏈接描述
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/96234.html
摘要:適用于主要入口頁面生成多頁,子頁面和次要頁面使用單頁形式的項目。文件用來存放固定的數據,而文件可更加自由的處理并返回數據。 VUE2的單頁應用框架有人分享了,多頁應用框架也有人分享了,這里分享一個單頁+多頁的混合應用框架吧,node.js寫了一個簡單的mock服務也集成在里面,整體初現雛形,還有很多需要優化和改善的地方。。。 項目結構 │ ├─build ...
摘要:遇到問題時一定要去閱讀文檔,可以發現使用時遺漏或者沒有注意的地方。打包文件時也要注意修改路徑不然就踩坑了。 vue_lofter 一個仿lofte手機端的vue項目 項目描述 技術棧 Vue2.0全家桶 + axios + Vuex + Mint-ui + Mock.js + Stylus 預覽效果 ?預覽地址(PC端建議在Chrome下開啟調試模式或移動端瀏覽) ?源碼地址??求你...
摘要:請輸入正確的用戶名和密碼接下來是這個頁面很簡單,簡單的寫一些內容作為測試是否登錄跳轉成功。路由攔截中判斷對象是否為空。 需要解決的問題:store存儲登錄狀態Vue-Router導航鉤子攔截路由Vue-Resource獲取后臺的數據需要判斷登錄返回的user源碼參考原文地址 主要技術棧:Vuex + Vue-Resource + Vue-Router后臺用mock-data來模擬數據。...
閱讀 1953·2021-09-30 09:46
閱讀 1366·2019-08-30 15:43
閱讀 1123·2019-08-29 13:28
閱讀 1922·2019-08-29 11:24
閱讀 1681·2019-08-26 13:22
閱讀 3892·2019-08-26 12:01
閱讀 1816·2019-08-26 11:33
閱讀 3242·2019-08-23 15:34