Vue3项目练习详细步骤(第一部分:项目构建,登录注册页面)

项目环境准备 

工程创建 

安装依赖 

项目调整

注册功能

页面结构 

接口文档

 数据绑定和校验

 数据接口调用

解决跨域问题

 登录功能

接口文档

数据绑定和校验

 数据接口调用

优化登录/注册成功提示框

项目演示

项目的后端接口参考:https://blog.csdn.net/dafsq/category_12646722.html?spm=1001.2014.3001.5482

项目环境准备 

工程创建 

到需要的目录下使用命令创建vue 项目

vue create 项目名

 选择默认创建vue3项目

安装依赖 

创建成功后在项目目录下安装第三方依赖

npm install element-plus --save
npm install @element-plus/icons-vue
npm install axios
npm install sass -D

项目调整

Visual Studio Code打开项目目录

 修改main.js中的内容

import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
import locale from 'element-plus/dist/locale/zh-cn'

const app = createApp(App)
 
app.use(ElementPlus,{locale})
app.mount('#app')

删除项目下components目录中的所有内容

在src目录下新建api、utils、views这三个目录 

在utils目录下新建请求工具文件request.js 

//定制请求的实例

//导入axios  npm install axios
import axios from 'axios';
//定义一个变量,记录公共的前缀  ,  baseURL
const baseURL = 'http://localhost:8080';
const instance = axios.create({baseURL})


//添加响应拦截器
instance.interceptors.response.use(
    result=>{
        return result.data;
    },
    err=>{
        alert('服务异常');
        return Promise.reject(err);//异步的状态转化成失败的状态
    }
)

export default instance;

 将项目需要的静态资源复制到assets目录下

静态资源获取:https://download.csdn.net/download/dafsq/89349949?spm=1001.2014.3001.5503

 修改App.vue中的内容

<template>
  <div>hello vue3</div>
</template>

<script>

export default {
  name: 'App',
  components: {
  }
}
</script>

<style>

</style>

 在项目目录下启动项目

npm run serve

访问查看

注册功能

页面结构 

 在views目录下新建Login.vue文件

在Login.vue 文件中完善代码

<script setup>
import { User, Lock } from '@element-plus/icons-vue'
import { ref } from 'vue'
//控制注册与登录表单的显示, 默认显示注册
const isRegister = ref(false)
</script>

<template>
    <el-row class="login-page">
        <el-col :span="12" class="bg"></el-col>
        <el-col :span="6" :offset="3" class="form">
            <!-- 注册表单 -->
            <el-form ref="form" size="large" autocomplete="off" v-if="isRegister">
                <el-form-item>
                    <h1>注册</h1>
                </el-form-item>
                <el-form-item>
                    <el-input :prefix-icon="User" placeholder="请输入用户名"></el-input>
                </el-form-item>
                <el-form-item>
                    <el-input :prefix-icon="Lock" type="password" placeholder="请输入密码"></el-input>
                </el-form-item>
                <el-form-item>
                    <el-input :prefix-icon="Lock" type="password" placeholder="请输入再次密码"></el-input>
                </el-form-item>
                <!-- 注册按钮 -->
                <el-form-item>
                    <el-button class="button" type="primary" auto-insert-space>
                        注册
                    </el-button>
                </el-form-item>
                <el-form-item class="flex">
                    <el-link type="info" :underline="false" @click="isRegister = false">
                        ← 返回
                    </el-link>
                </el-form-item>
            </el-form>
            <!-- 登录表单 -->
            <el-form ref="form" size="large" autocomplete="off" v-else>
                <el-form-item>
                    <h1>登录</h1>
                </el-form-item>
                <el-form-item>
                    <el-input :prefix-icon="User" placeholder="请输入用户名"></el-input>
                </el-form-item>
                <el-form-item>
                    <el-input name="password" :prefix-icon="Lock" type="password" placeholder="请输入密码"></el-input>
                </el-form-item>
                <el-form-item class="flex">
                    <div class="flex">
                        <el-checkbox>记住我</el-checkbox>
                        <el-link type="primary" :underline="false">忘记密码?</el-link>
                    </div>
                </el-form-item>
                <!-- 登录按钮 -->
                <el-form-item>
                    <el-button class="button" type="primary" auto-insert-space>登录</el-button>
                </el-form-item>
                <el-form-item class="flex">
                    <el-link type="info" :underline="false" @click="isRegister = true">
                        注册 →
                    </el-link>
                </el-form-item>
            </el-form>
        </el-col>
    </el-row>
</template>

<style lang="scss" scoped>
/* 样式 */
.login-page {
    height: 100vh;
    background-color: #fff;

    .bg {
        background: url('@/assets/logo2.png') no-repeat 60% center / 240px auto,
            url('@/assets/login_bg.jpg') no-repeat center / cover;
        border-radius: 0 20px 20px 0;
    }

    .form {
        display: flex;
        flex-direction: column;
        justify-content: center;
        user-select: none;

        .title {
            margin: 0 auto;
        }

        .button {
            width: 100%;
        }

        .flex {
            width: 100%;
            display: flex;
            justify-content: space-between;
        }
    }
}
</style>

 在App.vue文件中引入Login.vue

注意如果发现项目报错:Module not found: Error: Can't resolve 'sass-loader' in 'D:\vue\vue_app'

有很多种情况,比如没安装SASS加载器 或者是安装了版本太高,不支持,下面这种是解决版本过高问题的

 在项目目录下运行以下命令

//首先清除我们已经安装过的版本:
npm uninstall node-sass 
npm uninstall sass-loader
npm uninstall style-loader
//注意我们清除的时候可以选择全局的清除 全局的安装,否则下次创建 项目还会有同样的错误 执行重复的操作
npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/  //淘宝镜像安装
npm install sass-loader@7.3.1 --save-dev    //安装7.3.1版本的sass
npm install style-loader --save-dev // 安装style-loader



在main.js中引入静态文件包下的main.scss文件

import'./assets/main.scss'

保存刷新后查看页面 

接口文档

 数据绑定和校验

定义数据模型

//定义数据模型
const registerData = ref({
    username:'',
    password:'',
    rePassword:''
})

将数据绑定给表单

对表单项进行校验 

//二次校验密码的函数
const checkRePassword = (rule,value,callback) => {
    if(value == ''){
        callback(new Error('请再次确认密码'))
    } else if( value !== registerData.value.password){
        callback('二次确认密码不相同请重新输入')
    } else{
        callback()
    }
}

//定义表单校验规则
const rules = ref({
    username:[
        {required:true,massage:'请输入用户名',trigger:'blur'},
        {min:5,max:16,message:'请输入长度5~16非空字符',trigger:'blur'}
    ],
    password:[
        {required:true,massage:'请输入密码',trigger:'blur'},
        {min:5,max:16,message:'请输入长度5~16非空字符',trigger:'blur'}
    ],
    rePassword:[{validator:checkRePassword,trigger:'blur'}] //校验二次输入密码是否相同
})

绑定表单校验

 保存刷新查看校验效果

 数据接口调用

  • 将之前的springboot项目启动
  • 启动redis

在api目录下创建user.js文件 

 在文件中完成调用接口函数的编写

//导入request.js请求工具
import request from '@/utils/request.js'

//提供调用注册接口的函数
export const userRegisterService = (registerData) => {
    //借助UrlSearchParams完成传递
    const params = new URLSearchParams()
    for (let key in registerData){
        params.append(key,registerData[key]);
    }

    return request.post('/user/register',params);
}

定义调用接口注册函数

//调用后台接口完成注册
import {userRegisterService} from '@/api/user.js'
const register = async () => {
    //registerData是一个响应式对象,调用时现需要加上.value
    let result = await userRegisterService(registerData.value);
    if(result.code == 0) {
        //成功
        alert(result.msg ? result.massage:'注册成功');
    }else{
        //失败
        alert('注册失败')
    }
}

 在注册按钮处绑定注册请求单击事件

解决跨域问题

        由于浏览器的同源策略限制,向不同源(不同协议、不同域名、不同端口)发送ajax请求会失败 

在vue.config.js文件中完成配置代理

module.exports={
  lintOnSave:false, //关闭eslint语法检查配置
  devServer:{
    proxy:{
      '/api':{
        target:'http://localhost:8888', //这里后台的地址模拟的;应该填写你们真实的后台接口
        ws:false,
        changOrigin:true, //允许跨域
        pathRewrite:{'^/api':''}  //路径重写,请求的时候使用这个api就可以
      }
    }
  }
}

在request.js文件中将请求路径改为/api

 重启项目测试注册功能

已成功注册并且数据库中也成功添加了该用户的数据

 登录功能

接口文档

数据绑定和校验

        由于用户名和密码的数据和校验在定义注册数据模型是就已经定义好了,所以这里直接复用注册的数据和校验就可以了

 数据接口调用

在api文件中提供调用登录接口的函数

//提供调用登录接口的函数
export const userLoginService = (loginData) => {
    //借助UrlSearchParams完成传递
    const params = new URLSearchParams()
    for (let key in loginData){
        params.append(key,loginData[key]);
    }
    return request.post('/user/login',params);    
}

回到登录页面代码中完成登录单击事件函数 

//登录函数
import {userLoginService} from '@/api/user.js'
const login = async () =>{
    //调用接口完成登录
    let result = await userLoginService(registerData.value);
    if(result.code == 0){
        alert(result.msg ? result.msg : '登录成功')
    }else{
        alert('登录失败')
    }
}

给登录按钮绑定单击事件 

因为登录和注册是绑定的同一个数据模模型,所以要在每次登录和注册切换时清空数据

//定义函数,清空数据模型
const clearRegisterData = () =>{
    registerData.value = {
        username:'',
        password:'',
        rePassword:''
    }
}

 在切换注册和返回的按钮中绑定清空数据函数

刷新保存到页面中登录查看

优化登录/注册成功提示框

 在登录页面文件中导入组件修改登录函数内容

import { ElMessage } from 'element-plus'

ElMessage.error('服务异常');
ElMessage.success('登录成功!')

 保存运行查看效果

  • 42
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue3是目前前端开发中非常流行的一种JavaScript框架。它的特点是简单、易学、高效,并且有着很好的可扩展性。登录注册是Web应用中常见的功能,下面是一个使用Vue3实现的简单的登录注册项目案例: 1. 首先,你需要创建一个Vue3项目,可以使用Vue CLI等工具来快速搭建。 2. 接下来,你需要在Vue3项目中安装Vue Router和Vuex,它们分别用于管理路由和状态。 3. 然后,在src目录下创建一个views文件夹,用于存放所有的页面组件。在views文件夹下创建Login.vue和Register.vue两个组件。 4. 在Login.vue中,你可以编写登录表单,并且在表单中添加相应的数据绑定和事件处理逻辑。 5. 在Register.vue中,你可以编写注册表单,并且在表单中添加相应的数据绑定和事件处理逻辑。 6. 接着,在src目录下创建一个store文件夹,用于存放Vuex相关的代码。在store文件夹下创建一个user.js文件,用于管理用户信息。 7. 在user.js文件中,你可以定义一个state对象来存储用户信息,同时定义一些mutation和action来修改和获取用户信息。 8. 最后,在src目录下创建一个router.js文件,用于管理路由。在router.js文件中,你可以定义两个路由:一个用于显示登录页面,另一个用于显示注册页面。 这样,一个简单的Vue3登录注册项目就完成了。当用户输入用户名和密码进行登录或者注册时,相应的数据会被提交到后端进行处理,并且根据后端返回的结果来更新用户信息和路由跳转等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

open_test01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值