您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么使用vue cli實現項目登陸頁面”,在日常操作中,相信很多人在怎么使用vue cli實現項目登陸頁面問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用vue cli實現項目登陸頁面”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
工程方式搭建項目,請將測試需要用的后臺web服務程序事先準備好。
在命令行,到自己的vue工程存放的目錄,運行一下命令,前提是vue-cli先安裝好。
vue init webpack vuepro
npm install element-ui -S
打開 src目錄下的main.js,該文件是項目的入口文件,所以在這里導入,其他組件均可使用,不用再導入。
import Vue from 'vue' //新添 import ElementUI from 'element-ui' //新增 import 'element-ui/lib/theme-chalk/index.css' //新增 Vue.use(ElementUI)
1) 新建views目錄,在目錄上右擊,選擇新建vue(簡單模塊)創建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>
按照css.txt中的說明進行引入,用于控制樣式,加入樣式
base64編碼:基于64個可打印字符來表示二進制數據,用于傳輸8Bit字節代碼,可用于在HTTP環境下傳遞較長的標識信息。采用Base64編碼具有不可讀性,需要解碼后才能閱讀。
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 } ] })
<el-button type="primary" @click="submitForm('ruleForm')" >提交</el-button>
在項目目錄,運行一下命令,啟動服務:
npm run dev
界面效果:
axios是vue2提倡使用的輕量版的ajax。它是基于promise的HTTP庫。它會從瀏覽器中創建XMLHttpRequests,與Vue配合使用非常好。
vue.js有著名的全家桶系列:vue-router,vuex, vue-resource,再加上構建工具vue-cli,就是一個完整的vue項目的核心構成。其中vue-resource是Vue.js的一款插件,它可以通過XMLHttpRequest或JSONP發起請求并處理響應,但在vue更新到2.0之后,作者就宣告不再對vue-resource更新,而是推薦的axios
注:qs.js它是一個url參數轉化的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基礎上擴展的插件,在Vue.prototype原型上擴展了$http等屬性,可以更加方便的使用axios
npm install axios -S
2)在Login組件中導入axios
import axios from 'axios' export default { ......
在提交按鈕的監聽函數中加入發送get請求的代碼:
//請求url,需要保證服務可用 let url = 'http://localhost:8080/webserver/userMsg/userAction!login.action'; //注意數據是保存到json對象的params屬性 axios.get(url, { params: { userNo: this.userNo, userPwd: this.userPwd } }).then(function(response) { console.log(response); }).catch(function(error) { console.log(error); });
請注意下面圖上的錯誤信息,請求發生了跨域錯誤問題:
跨域請求問題:因為我們采用的是前后端分離的方式進行開發,前端和后端分別泡在不同的服務器上,基于安全性考慮,瀏覽器有同源策略,所以出現了跨域問題。 同源策略[same origin policy]是瀏覽器的一個安全功能,不同源的客戶端腳本在沒有明確授權的情況下,不能讀寫對方資源。 同源策略是瀏覽器安全的基石。
4)跨域問題的處理
在filter中處理跨域問題,關鍵代碼:
// Access-Control-Allow-Origin就是我們需要設置的域名 // 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中央控制器之前
//注意數據是直接保存到json對象 axios.post(url, { userNo: 'admin', userPwd: '123' }).then(function(response) { console.log(response); }).catch(function(error) { console.log(error); });
輸入的測試賬號和密碼均正確,使用get發送請求獲取的響應為“密碼正確”,但post方式發送的請求獲取的響應為“密碼不正確”!原因分析:通過觀察控制臺可以發現,post發送請求時,請求參數是以json格式通過request payload進行傳送的,的struts的并沒有處理這種方式傳遞的參數(起碼是我們使用的struts版本),所以傳遞到服務器的參數并沒有得到有效的解析。
問題處理:
第一種方式: 在服務端編碼實現request payload參數解析。在BaseAction中加入一個方法,該方法從request payload中獲取json數據,并轉化為指定的類。
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("獲取請求參數異常: " + e); } }
獲取參數時調用該方法獲取
User user = (User)this.getRequestBody(User.class);
第二種方式:使用qs.js庫,將{a:'b',c:'d'}轉換成'a=b&c=d'。
1) 安裝qs和vue-axios
npm install qs -S
npm install vue-axios -S
安裝成功后會在package.json中“dependencies”中會看到安裝的新庫。
在提交請求時使用qs對json對象進行轉換
//注意數據是直接保存到json對象 let params = { userNo: 'admin', userPwd: '123' }; //參數格式轉換 let paramStr = qs.stringify(params); console.log(paramStr); //提交時使用轉換之后的參數 axios.post(url, paramStr).then(function(response) { console.log(response); }).catch(function(error) { console.log(error); });
觀察控制臺中的輸出,已經將json格式轉化為&連接的格式。查看返回結果是否是預期值。
為簡化axios使用,還可以使用axios全局配置及攔截器 1) 安裝vue-axios
npm install vue-axios -S
2) 將隨課件提供的api目錄考到src根路徑下
現在可以將在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) 在提交時不需要手動處理轉換,全局配置進行轉換。
//修改url的獲取方式,url已經配置在了action.js中,這里只要指定action路徑 //服務地址和服務上下文已經在http.js中設置了axios.defaults.baseURL, //axios會根據配置自動獲取。 let url = this.axios.urls.SYSTEM_USER_DOLOGIN; this.axios.post(url, params).then(resp => { console.log(resp); }).catch(resp => {});
到此,關于“怎么使用vue cli實現項目登陸頁面”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。