vue項(xiàng)目登錄頁(yè)面實(shí)現(xiàn)記住用戶名和密碼的示例代碼
記錄一下實(shí)現(xiàn)的邏輯,應(yīng)該分兩步來(lái)理解這個(gè)邏輯
首次登錄,頁(yè)面沒(méi)有用戶的登錄信息,實(shí)現(xiàn)邏輯如下:
- 用戶輸入用戶名和密碼登錄,用戶信息為名為form的響應(yīng)式對(duì)象,v-model分別對(duì)應(yīng)兩個(gè)輸入框
- 用戶點(diǎn)擊登錄實(shí)現(xiàn)登錄功能
- 判斷是否勾選了記住密碼,v-model一個(gè)CheckBox,勾選為true,不勾選為false,默認(rèn)false
- 若勾選記住密碼,則在瀏覽器的localstorage中寫入一個(gè)名為loginInfo的對(duì)象,值為字符串后的form
- 若沒(méi)有勾選,同樣在localstorage中寫入一個(gè)名為loginInfo的對(duì)象,值為空
下次再登錄,就會(huì)根據(jù)上一次的勾選狀態(tài)來(lái)判斷是否填充form輸入框,邏輯如下
掛載頁(yè)面時(shí),判斷l(xiāng)ocalstorage中是否有需要的對(duì)象
- 如果有,就把rememberMe的值設(shè)為true,并向頁(yè)面的輸入框填充用戶名和米面
- 如果沒(méi)有,就把rememberMe的值設(shè)為false
因?yàn)檫壿嫳容^簡(jiǎn)單,就不再畫圖了
放一下相關(guān)的代碼
<template> <div class="login"> <el-form ref="formRef" :model="form" :rules="rules" class="login-form"> <h3 class="title">登錄</h3> <el-form-item prop="username"> <el-input v-model="form.username" placeholder="輸入賬號(hào)"> <template #prefix> <el-icon class="el-input__icon"> <User /> </el-icon> </template> </el-input> </el-form-item> <el-form-item prop="password"> <el-input v-model="form.password" placeholder="輸入密碼" type="password" show-password @keyup.enter.native="doLogin"> <template #prefix> <el-icon> <Lock /> </el-icon> </template> </el-input> </el-form-item> <div class="tooltip"> <el-checkbox v-model="rememberMe" label="記住我" size="large" /> <div class="register" @click="toRegister">注冊(cè)賬號(hào)</div> <!-- <a href="#">忘記密碼</a> --> </div> <el-form-item> <el-button style="width: 100%" @click="doLogin" class="input">登錄</el-button> </el-form-item> <div class="sep"> <div style="margin-top: -11px"> <label>聯(lián)系我們</label> </div> </div> </el-form> </div> </template> <script setup> import { reactive, ref, onMounted } from 'vue' import { useUserStore } from '@/stores/user'; import { useRouter } from 'vue-router' import { ElMessage } from 'element-plus'; const userStore = useUserStore() const router = useRouter() import http from '@/utils/http' // import axios from 'axios' const rememberMe = ref(false) const formRef = ref(null) const form = ref({ username: '', password: '' }) const rules = { username: [ { required: true, message: "用戶名不能為空", trigger: "blur" }, { min: 2, max: 30, message: "長(zhǎng)度在 2 到 30 個(gè)字符", trigger: "blur" } ], password: [ { required: true, message: "密碼不能為空", trigger: "blur" }, { min: 3, max: 30, message: "長(zhǎng)度在 6 到 30 個(gè)字符", trigger: "blur" } ], } const doLogin = () => { const { username, password } = form.value const data = { username, password } // console.log(data) formRef.value.validate(async valid => { if (valid) { try { await userStore.getUserInfo(data) // console.log('sdfdssff', userStore.userInfo) if (userStore.userInfo.Authorization) { if(rememberMe.value){ localStorage.setItem('loginInfo', JSON.stringify(form.value)) } else { localStorage.setItem('loginInfo', JSON.stringify({})) } router.push('/') } } catch (error) { ElMessage.error('用戶名或密碼錯(cuò)誤') } } else { ElMessage.error('校驗(yàn)沒(méi)通過(guò)') } }) } const toRegister = () => { router.push('/register') } // 頁(yè)面加載時(shí)監(jiān)聽是否有記住密碼 onMounted(() => { // console.log(Object.keys(localStorage.getItem('loginInfoTs'))) if(localStorage.getItem('loginInfo') != null && Object.keys(localStorage.getItem('loginInfo')).length > 2){ rememberMe.value = true const loginInfo = JSON.parse(localStorage.getItem('loginInfo')) form.value.username = loginInfo.username form.value.password = loginInfo.password } else { rememberMe.value = false } }) </script>
核心代碼是doLogin方法和onMounted中的內(nèi)容
到此這篇關(guān)于vue項(xiàng)目登錄頁(yè)面實(shí)現(xiàn)記住用戶名和密碼的示例代碼的文章就介紹到這了,更多相關(guān)vue登錄頁(yè)記住用戶名和密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue移動(dòng)端輕量級(jí)的輪播組件實(shí)現(xiàn)代碼
這篇文章主要介紹了vue移動(dòng)端輕量級(jí)的輪播組件實(shí)現(xiàn)代碼,一個(gè)簡(jiǎn)單的移動(dòng)端卡片滑動(dòng)輪播組件,適用于Vue2.x。本文給大家?guī)?lái)了實(shí)例代碼,需要的朋友參考下吧2018-07-07利用vue3+threejs仿iView官網(wǎng)大波浪特效實(shí)例
最近好幾個(gè)vue項(xiàng)目都是用ivew作為UI框架,所以下面這篇文章主要給大家介紹了關(guān)于如何利用vue3?+?threejs仿iView官網(wǎng)大波浪特效的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12解決vue初始化項(xiàng)目時(shí),一直卡在Project description上的問(wèn)題
今天小編就為大家分享一篇解決vue初始化項(xiàng)目時(shí),一直卡在Project description上的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10vue普通加密及國(guó)密SM2、SM3和sm4的使用例子
在我的項(xiàng)目中,甲方要求系統(tǒng)登錄時(shí)對(duì)密碼進(jìn)行加密后再傳給后端,指定使用國(guó)密SM3,下面這篇文章主要給大家介紹了關(guān)于vue普通加密及國(guó)密SM2、SM3和sm4使用的相關(guān)資料,需要的朋友可以參考下2022-12-12一文了解Vue 3 的 generate 是這樣生成 render&n
本文介紹generate階段是如何根據(jù)javascript AST抽象語(yǔ)法樹生成render函數(shù)字符串的,本文中使用的vue版本為3.4.19,感興趣的朋友跟隨小編一起看看吧2024-06-06vue-cli2.x項(xiàng)目?jī)?yōu)化之引入本地靜態(tài)庫(kù)文件的方法
這篇文章主要介紹了vue-cli2.x項(xiàng)目?jī)?yōu)化之引入本地靜態(tài)庫(kù)文件的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Vue全局注冊(cè)與局部注冊(cè)兩種組件注冊(cè)的方式
本文主要介紹了Vue全局注冊(cè)與局部注冊(cè)兩種組件注冊(cè)的方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07