vue項(xiàng)目實(shí)現(xiàn)登陸注冊(cè)效果
本文實(shí)例為大家分享了vue項(xiàng)目實(shí)現(xiàn)登陸注冊(cè)效果的具體代碼,供大家參考,具體內(nèi)容如下
主要內(nèi)容
本章目標(biāo):vue+element-ui完成注冊(cè)以及登陸
1.效果展示

2.視圖頁面:views
注冊(cè)頁面效果實(shí)現(xiàn):
<template>
<div class="login-section">
<!-- :rules="rules" -->
<el-form label-position="top" label-width="100px" class="demo-ruleForm" :rules="rules" :model="rulesForm" status-icon ref='ruleForm'>
<el-form-item label="用戶名" prop="name">
<el-input type="text" v-model="rulesForm.name"></el-input>
</el-form-item>
<el-form-item label="密碼" prop="password">
<el-input type="password" v-model="rulesForm.password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
<el-button>重置</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import {login} from '@/service/api';
export default {
data() {
return {
rulesForm:{
name:'',
password:''
},
rules:{
name:[
{required:true,message:'名字沒寫',trigger:'blur'},
{min:1,max:5,message:'長(zhǎng)度在3到5位'}
],
password:[
{required:true,message:'名字沒寫',trigger:'blur'},
{min:3,max:5,message:'長(zhǎng)度在3到5位'}
]
}
};
},
methods: {
submitForm(formName){
this.$refs[formName].validate((valid)=>{
if(valid){//如果校檢通過向后端發(fā)送用戶名 密碼
login({
name:this.rulesForm.name,
password:this.rulesForm.password
}).then((data)=>{
console.log(data)
if(data.code===0){
localStorage.setItem('token',data.data.token)
window.location.href='/'
}
if(data.code===1){
this.$message.error(data.mes)
}
})
}else{
console.log('error submit!!');
return false;
}
})
}
}
}
</script>
<style lang="stylus">
.login-section
padding 0px 20px
</style>
login.vue
<template>
<div class="login-section">
<el-form label-position="top" label-width="100px" class="demo-ruleForm" :rules="rules" :model="rulesForm" status-icon ref='ruleForm'>
<el-form-item label="用戶名" prop="name">
<el-input type="text" v-model="rulesForm.name"></el-input>
</el-form-item>
<el-form-item label="密碼" prop="password">
<el-input type="password" v-model="rulesForm.password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
<el-button>重置</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import {login} from '@/service/api';
export default {
data() {
return {
rulesForm:{
name:'',
password:''
},
rules:{
name:[
{required:true,message:'名字沒寫',trigger:'blur'},
{min:1,max:5,message:'長(zhǎng)度在3到5位'}
],
password:[
{required:true,message:'名字沒寫',trigger:'blur'},
{min:3,max:5,message:'長(zhǎng)度在3到5位'}
]
}
};
},
methods: {
submitForm(formName){
this.$refs[formName].validate((valid)=>{
if(valid){//如果校檢通過向后端發(fā)送用戶名 密碼
login({
name:this.rulesForm.name,
password:this.rulesForm.password
}).then((data)=>{
console.log(data)
if(data.code===0){
localStorage.setItem('token',data.data.token)
window.location.href='/'
}
if(data.code===1){
this.$message.error(data.mes)
}
})
}else{
console.log('error submit!!');
return false;
}
})
}
}
}
</script>
<style lang="stylus">
.login-section
padding 0px 20px
</style>
路由:index.js
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
import Store from '@/store'
import {userInfo} from '@/service/api.js'
import Home from '@/views/home/Home.vue'
import Login from '@/views/user-login/index.vue'
const router = new Router({
mode:"history",
routes:[
{
path:'/',
name:"Home",
title:"首頁",
component:Home
},
{
path:'/login',
name:"login",
title:"登錄頁",
component:Login,
meta:{
login:true
}
}
]
});
router.beforeEach( async (to,from,next) => {
const token = localStorage.getItem('token');
const isLogin = !!token;
//進(jìn)入路由的時(shí)候,需要向后端發(fā)送token,驗(yàn)證是否合法
const data = await userInfo();
Store.commit('chageUserInfo',data.data)
if(to.matched.some(item => item.meta.login)){//需要登錄
if(isLogin){//已經(jīng)登錄的,直接通過
if(data.error === 400){//后端告訴你,登錄不成功
next({name:'login'});
localStorage.removeItem('token');
return;
}
if(to.name === 'login'){
next({name:'home'});
}else{
next();
}
return;
}
if(!isLogin && to.name === 'login'){//未登錄,但是要去登錄頁
next();
}
if(!isLogin && to.name !== 'login'){//未登錄,去的也不是登錄頁
next({name:'login'});
}
}else{
next();
}
})
export default router;
總結(jié)
今天的內(nèi)容就先到這里,因?yàn)檫€有一些沒完善所以不是很好,后面再繼續(xù)改進(jìn)!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- vue實(shí)現(xiàn)登陸登出的實(shí)現(xiàn)示例
- Vue2.0 axios前后端登陸攔截器(實(shí)例講解)
- vue+axios新手實(shí)踐實(shí)現(xiàn)登陸的示例代碼
- 詳解用vue.js和laravel實(shí)現(xiàn)微信授權(quán)登陸
- Vue 前端實(shí)現(xiàn)登陸攔截及axios 攔截器的使用
- 基于vue-cli3和element實(shí)現(xiàn)登陸頁面
- Vue學(xué)習(xí)之路之登錄注冊(cè)實(shí)例代碼
- vue 實(shí)現(xiàn)通過手機(jī)發(fā)送短信驗(yàn)證碼注冊(cè)功能
- vue.js實(shí)現(xiàn)用戶評(píng)論、登錄、注冊(cè)、及修改信息功能
- VUE實(shí)現(xiàn)注冊(cè)與登錄效果
相關(guān)文章
vue+d3js+fastapi實(shí)現(xiàn)天氣柱狀圖折線圖餅圖的示例
本文主要介紹了vue+d3js+fastapi實(shí)現(xiàn)天氣柱狀圖折線圖餅圖的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
vue.js中父組件調(diào)用子組件的內(nèi)部方法示例
這篇文章主要給大家介紹了關(guān)于vue.js中父組件調(diào)用子組件內(nèi)部方法的相關(guān)資料,文中給出來了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
vue3循環(huán)設(shè)置ref并獲取的解決方案
我們?cè)谄綍r(shí)做業(yè)務(wù)的時(shí)候,父子組件通信會(huì)經(jīng)常用到ref,這篇文章主要給大家介紹了關(guān)于vue3循環(huán)設(shè)置ref并獲取的解決方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
解決打包后出現(xiàn)錯(cuò)誤y.a.addRoute is not a function的
這篇文章主要介紹了解決打包后出現(xiàn)y.a.addRoute is not a function的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
vue生命周期四個(gè)階段created和mount詳解
這篇文章主要介紹了vue生命周期四個(gè)階段created和mount,本文給大家介紹的非常詳細(xì),補(bǔ)充介紹了什么是實(shí)例,什么是實(shí)例被掛載到DOM,什么是dom,dao操作又是什么,感興趣的朋友跟隨小編一起看看吧2024-02-02
vite打包出現(xiàn)?"default"?is?not?exported?by?"
這篇文章主要給大家介紹了關(guān)于vite打包出現(xiàn)?"default"?is?not?exported?by?"node_modules/...問題的解決辦法,文中通過代碼將解決的辦法介紹的非常詳細(xì),對(duì)同樣遇到這個(gè)問題的朋友具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-06-06

