vue cli實現(xiàn)項目登陸頁面流程詳解
1. 搭建項目
工程方式搭建項目,請將測試需要用的后臺web服務程序事先準備好。
1.1 使用vue-cli創(chuàng)建項目
在命令行,到自己的vue工程存放的目錄,運行一下命令,前提是vue-cli先安裝好。
vue init webpack vuepro
1.2 通過npm安裝element-ui
npm install element-ui -S
1.3 導入組件
打開 src目錄下的main.js,該文件是項目的入口文件,所以在這里導入,其他組件均可使用,不用再導入。
import Vue from 'vue' //新添 import ElementUI from 'element-ui' //新增 import 'element-ui/lib/theme-chalk/index.css' //新增 Vue.use(ElementUI)
2 創(chuàng)建登錄頁面
2.1 創(chuàng)建登錄組件
1) 新建views目錄,在目錄上右擊,選擇新建vue(簡單模塊)創(chuàng)建Login
<template> </template> <script> </script> <style> </style>
2)在element-ui組件,在form組件中找到與登錄頁面類似的組件,拷貝代碼到剛新建的Login組件中,修改為自己需要的登錄頁面,頁面包含:賬戶,密碼, 提交按鈕
<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中的說明進行引入,用于控制樣式,加入樣式

base64編碼:基于64個可打印字符來表示二進制數(shù)據(jù),用于傳輸8Bit字節(jié)代碼,可用于在HTTP環(huán)境下傳遞較長的標識信息。采用Base64編碼具有不可讀性,需要解碼后才能閱讀。
2.3 配置路由
router/index.js
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
//首先導入組件
import Login from '@/views/Login'
Vue.use(Router)
export default new Router({
routes: [
{
//配置路由,根路徑訪問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 運行效果
在項目目錄,運行一下命令,啟動服務:
npm run dev
界面效果:

3. 后臺交互
3.1 引入axios
axios是vue2提倡使用的輕量版的ajax。它是基于promise的HTTP庫。它會從瀏覽器中創(chuàng)建XMLHttpRequests,與Vue配合使用非常好。
vue.js有著名的全家桶系列:vue-router,vuex, vue-resource,再加上構(gòu)建工具vue-cli,就是一個完整的vue項目的核心構(gòu)成。其中vue-resource是Vue.js的一款插件,它可以通過XMLHttpRequest或JSONP發(fā)起請求并處理響應,但在vue更新到2.0之后,作者就宣告不再對vue-resource更新,而是推薦的axios
3.2 axios/qs/vue-axios安裝與使用
注:qs.js它是一個url參數(shù)轉(zhuǎn)化的js庫。用法就兩個:
var obj = qs.parse('a=b&c=d'); //將URL解析成對象的形式:{a:'b',c:'d'}
var str = qs.stringify(obj); //將對象 序列化成URL的形式,以&進行拼接:a=b&c=d'vue-axios是在axios基礎(chǔ)上擴展的插件,在Vue.prototype原型上擴展了$http等屬性,可以更加方便的使用axios
3.2.1 安裝axios
npm install axios -S
2)在Login組件中導入axios
import axios from 'axios'
export default {
......3.2.2 發(fā)送get請求
在提交按鈕的監(jiān)聽函數(shù)中加入發(fā)送get請求的代碼:
//請求url,需要保證服務可用
let url = 'http://localhost:8080/webserver/userMsg/userAction!login.action';
//注意數(shù)據(jù)是保存到json對象的params屬性
axios.get(url, {
params: {
userNo: this.userNo,
userPwd: this.userPwd
}
}).then(function(response) {
console.log(response);
}).catch(function(error) {
console.log(error);
});請注意下面圖上的錯誤信息,請求發(fā)生了跨域錯誤問題:

跨域請求問題:因為我們采用的是前后端分離的方式進行開發(fā),前端和后端分別泡在不同的服務器上,基于安全性考慮,瀏覽器有同源策略,所以出現(xiàn)了跨域問題。 同源策略[same origin policy]是瀏覽器的一個安全功能,不同源的客戶端腳本在沒有明確授權(quán)的情況下,不能讀寫對方資源。 同源策略是瀏覽器安全的基石。
4)跨域問題的處理
在filter中處理跨域問題,關(guān)鍵代碼:
// Access-Control-Allow-Origin就是我們需要設(shè)置的域名
// Access-Control-Allow-Headers跨域允許包含的頭。
// Access-Control-Allow-Methods是允許的請求方式
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中,對所以請求進行攔截處理,可解決跨域問題。注意:請配置在struts中央控制器之前
3.2.3 發(fā)送post請求
//注意數(shù)據(jù)是直接保存到json對象
axios.post(url, {
userNo: 'admin',
userPwd: '123'
}).then(function(response) {
console.log(response);
}).catch(function(error) {
console.log(error);
});輸入的測試賬號和密碼均正確,使用get發(fā)送請求獲取的響應為“密碼正確”,但post方式發(fā)送的請求獲取的響應為“密碼不正確”!原因分析:通過觀察控制臺可以發(fā)現(xiàn),post發(fā)送請求時,請求參數(shù)是以json格式通過request payload進行傳送的,的struts的并沒有處理這種方式傳遞的參數(shù)(起碼是我們使用的struts版本),所以傳遞到服務器的參數(shù)并沒有得到有效的解析。
問題處理:
第一種方式: 在服務端編碼實現(xiàn)request payload參數(shù)解析。在BaseAction中加入一個方法,該方法從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("獲取請求參數(shù)異常: " + e);
}
}獲取參數(shù)時調(diào)用該方法獲取
User user = (User)this.getRequestBody(User.class);
第二種方式:使用qs.js庫,將{a:'b',c:'d'}轉(zhuǎn)換成'a=b&c=d'。
1) 安裝qs和vue-axios
npm install qs -S
npm install vue-axios -S
安裝成功后會在package.json中“dependencies”中會看到安裝的新庫。
在提交請求時使用qs對json對象進行轉(zhuǎn)換
//注意數(shù)據(jù)是直接保存到json對象
let params = {
userNo: 'admin',
userPwd: '123'
};
//參數(shù)格式轉(zhuǎn)換
let paramStr = qs.stringify(params);
console.log(paramStr);
//提交時使用轉(zhuǎn)換之后的參數(shù)
axios.post(url, paramStr).then(function(response) {
console.log(response);
}).catch(function(error) {
console.log(error);
});觀察控制臺中的輸出,已經(jīng)將json格式轉(zhuǎn)化為&連接的格式。查看返回結(jié)果是否是預期值。
3.2.4 簡化axios使用
為簡化axios使用,還可以使用axios全局配置及攔截器 1) 安裝vue-axios
npm install vue-axios -S
2) 將隨課件提供的api目錄考到src根路徑下

現(xiàn)在可以將在Login組件中的導入axios和qs語句刪除, action.js和http.js的配置詳見代碼中的注釋。 3)將action中的配置修改為自己的后臺服務配置
export default {
'SERVER': 'http://localhost:8080/webserver', //服務器
'SYSTEM_USER_DOLOGIN': '/userMsg/userAction!login.action', //登陸
'SYSTEM_USER_DOREG': '/userAction.action', //注冊
//獲取完整的請求地址
'getFullPath': k => { //獲得請求的完整地址,用于mockjs測試時使用
return this.SERVER + this[k];
}
}4)配置main.js
import Vue from 'vue' //vue項目對axios的全局配置(增加配置) import axios from '@/api/http' import VueAxios from 'vue-axios' Vue.use(VueAxios,axios) ......
5) 在提交時不需要手動處理轉(zhuǎn)換,全局配置進行轉(zhuǎn)換。
//修改url的獲取方式,url已經(jīng)配置在了action.js中,這里只要指定action路徑
//服務地址和服務上下文已經(jīng)在http.js中設(shè)置了axios.defaults.baseURL,
//axios會根據(jù)配置自動獲取。
let url = this.axios.urls.SYSTEM_USER_DOLOGIN;
this.axios.post(url, params).then(resp => {
console.log(resp);
}).catch(resp => {});到此這篇關(guān)于vue cli實現(xiàn)項目登陸頁面流程詳解的文章就介紹到這了,更多相關(guān)vue cli登陸頁面內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue 輸入電話號碼自動按3-4-4分割功能的實現(xiàn)代碼
這篇文章主要介紹了vue 輸入電話號碼自動按3-4-4分割功能的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
vue3中el-table實現(xiàn)表格合計行的示例代碼
這篇文章主要介紹了vue3中el-table實現(xiàn)表格合計行,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01
vue項目登錄模塊滑塊拼圖驗證功能實現(xiàn)代碼(純前端)
滑塊驗證作為一種反機器人的工具,也會不斷發(fā)展和演進,以適應不斷變化的威脅,這篇文章主要給大家介紹了vue項目登錄模塊滑塊拼圖驗證功能實現(xiàn)的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-07-07

