vue cli實(shí)現(xiàn)項(xiàng)目登陸頁(yè)面流程詳解
1. 搭建項(xiàng)目
工程方式搭建項(xiàng)目,請(qǐng)將測(cè)試需要用的后臺(tái)web服務(wù)程序事先準(zhǔn)備好。
1.1 使用vue-cli創(chuàng)建項(xiàng)目
在命令行,到自己的vue工程存放的目錄,運(yùn)行一下命令,前提是vue-cli先安裝好。
vue init webpack vuepro
1.2 通過(guò)npm安裝element-ui
npm install element-ui -S
1.3 導(dǎo)入組件
打開 src目錄下的main.js,該文件是項(xiàng)目的入口文件,所以在這里導(dǎo)入,其他組件均可使用,不用再導(dǎo)入。
import Vue from 'vue' //新添 import ElementUI from 'element-ui' //新增 import 'element-ui/lib/theme-chalk/index.css' //新增 Vue.use(ElementUI)
2 創(chuàng)建登錄頁(yè)面
2.1 創(chuàng)建登錄組件
1) 新建views目錄,在目錄上右擊,選擇新建vue(簡(jiǎn)單模塊)創(chuàng)建Login
<template> </template> <script> </script> <style> </style>
2)在element-ui組件,在form組件中找到與登錄頁(yè)面類似的組件,拷貝代碼到剛新建的Login組件中,修改為自己需要的登錄頁(yè)面,頁(yè)面包含:賬戶,密碼, 提交按鈕
<template> <div> <el-form > <el-form-item label="賬戶" > <el-input type="password" v-model="userName" autocomplete="off"></el-input> </el-form-item> <el-form-item label="密碼" > <el-input type="password" v-model="passWord" autocomplete="off"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button> </el-form-item> </el-form> </div> </template> <script> export default { name: 'Login', data: function() { return { userName: null, passWord: null, } }, methods: { submitForm: function() { console.log("fdfdd"); } } } </script> <style> </style>
2.2 引入css(css.txt)
按照css.txt中的說(shuō)明進(jìn)行引入,用于控制樣式,加入樣式
base64編碼:基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù),用于傳輸8Bit字節(jié)代碼,可用于在HTTP環(huán)境下傳遞較長(zhǎng)的標(biāo)識(shí)信息。采用Base64編碼具有不可讀性,需要解碼后才能閱讀。
2.3 配置路由
router/index.js
import Vue from 'vue' import Router from 'vue-router' import HelloWorld from '@/components/HelloWorld' //首先導(dǎo)入組件 import Login from '@/views/Login' Vue.use(Router) export default new Router({ routes: [ { //配置路由,根路徑訪問(wèn)Login組件 path: '/', name: 'Login', component: Login } ] })
2.4 在Login組件中將提交按鍵調(diào)整為100%寬度
<el-button type="primary" @click="submitForm('ruleForm')" style="width:100%">提交</el-button>
2.5 運(yùn)行效果
在項(xiàng)目目錄,運(yùn)行一下命令,啟動(dòng)服務(wù):
npm run dev
界面效果:
3. 后臺(tái)交互
3.1 引入axios
axios是vue2提倡使用的輕量版的ajax。它是基于promise的HTTP庫(kù)。它會(huì)從瀏覽器中創(chuàng)建XMLHttpRequests,與Vue配合使用非常好。
vue.js有著名的全家桶系列:vue-router,vuex, vue-resource,再加上構(gòu)建工具vue-cli,就是一個(gè)完整的vue項(xiàng)目的核心構(gòu)成。其中vue-resource是Vue.js的一款插件,它可以通過(guò)XMLHttpRequest或JSONP發(fā)起請(qǐng)求并處理響應(yīng),但在vue更新到2.0之后,作者就宣告不再對(duì)vue-resource更新,而是推薦的axios
3.2 axios/qs/vue-axios安裝與使用
注:qs.js它是一個(gè)url參數(shù)轉(zhuǎn)化的js庫(kù)。用法就兩個(gè):
var obj = qs.parse('a=b&c=d'); //將URL解析成對(duì)象的形式:{a:'b',c:'d'} var str = qs.stringify(obj); //將對(duì)象 序列化成URL的形式,以&進(jìn)行拼接:a=b&c=d'
vue-axios是在axios基礎(chǔ)上擴(kuò)展的插件,在Vue.prototype原型上擴(kuò)展了$http等屬性,可以更加方便的使用axios
3.2.1 安裝axios
npm install axios -S
2)在Login組件中導(dǎo)入axios
import axios from 'axios' export default { ......
3.2.2 發(fā)送get請(qǐng)求
在提交按鈕的監(jiān)聽函數(shù)中加入發(fā)送get請(qǐng)求的代碼:
//請(qǐng)求url,需要保證服務(wù)可用 let url = 'http://localhost:8080/webserver/userMsg/userAction!login.action'; //注意數(shù)據(jù)是保存到j(luò)son對(duì)象的params屬性 axios.get(url, { params: { userNo: this.userNo, userPwd: this.userPwd } }).then(function(response) { console.log(response); }).catch(function(error) { console.log(error); });
請(qǐng)注意下面圖上的錯(cuò)誤信息,請(qǐng)求發(fā)生了跨域錯(cuò)誤問(wèn)題:
跨域請(qǐng)求問(wèn)題:因?yàn)槲覀儾捎玫氖乔昂蠖朔蛛x的方式進(jìn)行開發(fā),前端和后端分別泡在不同的服務(wù)器上,基于安全性考慮,瀏覽器有同源策略,所以出現(xiàn)了跨域問(wèn)題。 同源策略[same origin policy]是瀏覽器的一個(gè)安全功能,不同源的客戶端腳本在沒有明確授權(quán)的情況下,不能讀寫對(duì)方資源。 同源策略是瀏覽器安全的基石。
4)跨域問(wèn)題的處理
在filter中處理跨域問(wèn)題,關(guān)鍵代碼:
// Access-Control-Allow-Origin就是我們需要設(shè)置的域名 // Access-Control-Allow-Headers跨域允許包含的頭。 // Access-Control-Allow-Methods是允許的請(qǐng)求方式 httpResponse.setHeader("Access-Control-Allow-Origin", "*");// *,任何域名 httpResponse.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE"); filterChain.doFilter(servletRequest, servletResponse);
在課件資料中提供了CorsFilter,配置到web.xml中,對(duì)所以請(qǐng)求進(jìn)行攔截處理,可解決跨域問(wèn)題。注意:請(qǐng)配置在struts中央控制器之前
3.2.3 發(fā)送post請(qǐng)求
//注意數(shù)據(jù)是直接保存到j(luò)son對(duì)象 axios.post(url, { userNo: 'admin', userPwd: '123' }).then(function(response) { console.log(response); }).catch(function(error) { console.log(error); });
輸入的測(cè)試賬號(hào)和密碼均正確,使用get發(fā)送請(qǐng)求獲取的響應(yīng)為“密碼正確”,但post方式發(fā)送的請(qǐng)求獲取的響應(yīng)為“密碼不正確”!原因分析:通過(guò)觀察控制臺(tái)可以發(fā)現(xiàn),post發(fā)送請(qǐng)求時(shí),請(qǐng)求參數(shù)是以json格式通過(guò)request payload進(jìn)行傳送的,的struts的并沒有處理這種方式傳遞的參數(shù)(起碼是我們使用的struts版本),所以傳遞到服務(wù)器的參數(shù)并沒有得到有效的解析。
問(wèn)題處理:
第一種方式: 在服務(wù)端編碼實(shí)現(xiàn)request payload參數(shù)解析。在BaseAction中加入一個(gè)方法,該方法從request payload中獲取json數(shù)據(jù),并轉(zhuǎn)化為指定的類。
public Object getRequestBody(Class clazz) { BufferedReader br; HttpServletRequest request = ServletActionContext.getRequest(); try { br = request.getReader(); String str, aStr = ""; while((str = br.readLine()) != null){ aStr += str; } System.out.println(aStr); Object obj = JSONObject.parseObject(aStr, clazz); return obj; } catch (IOException e) { throw new RuntimeException("獲取請(qǐng)求參數(shù)異常: " + e); } }
獲取參數(shù)時(shí)調(diào)用該方法獲取
User user = (User)this.getRequestBody(User.class);
第二種方式:使用qs.js庫(kù),將{a:'b',c:'d'}轉(zhuǎn)換成'a=b&c=d'。
1) 安裝qs和vue-axios
npm install qs -S
npm install vue-axios -S
安裝成功后會(huì)在package.json中“dependencies”中會(huì)看到安裝的新庫(kù)。
在提交請(qǐng)求時(shí)使用qs對(duì)json對(duì)象進(jìn)行轉(zhuǎn)換
//注意數(shù)據(jù)是直接保存到j(luò)son對(duì)象 let params = { userNo: 'admin', userPwd: '123' }; //參數(shù)格式轉(zhuǎn)換 let paramStr = qs.stringify(params); console.log(paramStr); //提交時(shí)使用轉(zhuǎn)換之后的參數(shù) axios.post(url, paramStr).then(function(response) { console.log(response); }).catch(function(error) { console.log(error); });
觀察控制臺(tái)中的輸出,已經(jīng)將json格式轉(zhuǎn)化為&連接的格式。查看返回結(jié)果是否是預(yù)期值。
3.2.4 簡(jiǎn)化axios使用
為簡(jiǎn)化axios使用,還可以使用axios全局配置及攔截器 1) 安裝vue-axios
npm install vue-axios -S
2) 將隨課件提供的api目錄考到src根路徑下
現(xiàn)在可以將在Login組件中的導(dǎo)入axios和qs語(yǔ)句刪除, action.js和http.js的配置詳見代碼中的注釋。 3)將action中的配置修改為自己的后臺(tái)服務(wù)配置
export default { 'SERVER': 'http://localhost:8080/webserver', //服務(wù)器 'SYSTEM_USER_DOLOGIN': '/userMsg/userAction!login.action', //登陸 'SYSTEM_USER_DOREG': '/userAction.action', //注冊(cè) //獲取完整的請(qǐng)求地址 'getFullPath': k => { //獲得請(qǐng)求的完整地址,用于mockjs測(cè)試時(shí)使用 return this.SERVER + this[k]; } }
4)配置main.js
import Vue from 'vue' //vue項(xiàng)目對(duì)axios的全局配置(增加配置) import axios from '@/api/http' import VueAxios from 'vue-axios' Vue.use(VueAxios,axios) ......
5) 在提交時(shí)不需要手動(dòng)處理轉(zhuǎn)換,全局配置進(jìn)行轉(zhuǎn)換。
//修改url的獲取方式,url已經(jīng)配置在了action.js中,這里只要指定action路徑 //服務(wù)地址和服務(wù)上下文已經(jīng)在http.js中設(shè)置了axios.defaults.baseURL, //axios會(huì)根據(jù)配置自動(dòng)獲取。 let url = this.axios.urls.SYSTEM_USER_DOLOGIN; this.axios.post(url, params).then(resp => { console.log(resp); }).catch(resp => {});
到此這篇關(guān)于vue cli實(shí)現(xiàn)項(xiàng)目登陸頁(yè)面流程詳解的文章就介紹到這了,更多相關(guān)vue cli登陸頁(yè)面內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Vue實(shí)現(xiàn)我的錢包充值功能的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何基于Vue實(shí)現(xiàn)我的錢包充值功能,文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2024-01-01Vue.extend 編程式插入組件的實(shí)現(xiàn)
這篇文章主要介紹了Vue.extend 編程式插入組件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11vue 輸入電話號(hào)碼自動(dòng)按3-4-4分割功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了vue 輸入電話號(hào)碼自動(dòng)按3-4-4分割功能的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04vue3中el-table實(shí)現(xiàn)表格合計(jì)行的示例代碼
這篇文章主要介紹了vue3中el-table實(shí)現(xiàn)表格合計(jì)行,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01vue項(xiàng)目登錄模塊滑塊拼圖驗(yàn)證功能實(shí)現(xiàn)代碼(純前端)
滑塊驗(yàn)證作為一種反機(jī)器人的工具,也會(huì)不斷發(fā)展和演進(jìn),以適應(yīng)不斷變化的威脅,這篇文章主要給大家介紹了vue項(xiàng)目登錄模塊滑塊拼圖驗(yàn)證功能實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07