vue从登陆注册开始

vue从登陆注册开始

要写一个网页界面,一般都是从登陆注册开始的。

我们直接使用element-plus来写登陆注册页面。

下载element-plus

npm install element-plus --save

引入element-plus

之前我们说过js的入口在main.js李,引入组件也是在这里引入的。在main.js中修改如下内容:

import { createApp } from 'vue'
import './style.css'

import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

import App from './App.vue'

const app = createApp(App)

app.use(ElementPlus)
app.mount('#app')

编写login页面

引入element-plus后就可以编写登陆界面了,前面我们说过vue采用组件化和模块化开发,这里我们开发一个login组件,并在app里引入该组件。

login.vue的内容如下所示:

<template>
    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" label-width="80px" class="login-form">
      <el-form-item label="Username" prop="username">
        <el-input v-model="loginForm.username" autocomplete="off"></el-input>
      </el-form-item>
      <el-form-item label="Password" prop="password">
        <el-input type="password" v-model="loginForm.password" autocomplete="off"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="login">Login</el-button>
      </el-form-item>
    </el-form>
  </template>
  
  <script>
  export default {
    data() {
      return {
        loginForm: {
          username: '',
          password: ''
        },
        loginRules: {
          username: [{ required: true, message: 'Please input username', trigger: 'blur' }],
          password: [{ required: true, message: 'Please input password', trigger: 'blur' }]
        }
      };
    },
    methods: {
      login() {
        this.$refs.loginForm.validate(valid => {
          if (valid) {
            // 在这里处理登录逻辑,比如发送请求给后端验证登录信息
            console.log('Logging in...');
          } else {
            return false;
          }
        });
      }
    }
  };
  </script>
  
  <style scoped>
  .login-form {
    width: 300px;
    margin: 0 auto;
  }
  </style>

需要注意的是上面的登陆界面还没有美化,即设置css样式,这个后面再来添加,前期先保证功能。

同时上面的界面只有登陆,如果我想要实现没有用户,用户要进行注册,跳转到注册页面,此时就需要引入路由,实现页面跳转。

引入路由

npm install vue-router@4 --save

路由一般放在router目录下,并新建一个index.js文件来存放路由信息,下面是index.js的内容。

import { createRouter, createWebHistory } from 'vue-router';
import Login from '../components/Login.vue';
import Register from '../components/Register.vue';

const routes = [
  {
        path: '/',
        redirect: '/login' // 将根路径重定向到登录页面
  },
  {
    path: '/login',
    name: 'Login',
    component: Login
  },
  {
    path: '/register',
    name: 'Register',
    component: Register
  }
];

const router = createRouter({
  history: createWebHistory(),
  routes
});

export default router;


当前我们只有login和register两个界面,所以这里只注册了两个路由,后面随着页面的增加可以将其再添加到这个文件里。

添加的register页面内容如下所示:

<template>
    <el-form ref="registerForm" :model="registerForm" :rules="registerRules" label-width="80px" class="register-form">
      <el-form-item label="用户名" prop="username">
        <el-input v-model="registerForm.username" autocomplete="off"></el-input>
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-input type="password" v-model="registerForm.password" autocomplete="off"></el-input>
      </el-form-item>
      <el-form-item label="确认密码" prop="repassword">
        <el-input type="password" v-model="registerForm.password" autocomplete="off"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="register">注册</el-button>
      </el-form-item>
    </el-form>
  </template>
  
  <script>
  export default {
    data() {
      return {
        registerForm: {
          username: '',
          password: ''
        },
        registerRules: {
          username: [{ required: true, message: 'Please input username', trigger: 'blur' }],
          password: [{ required: true, message: 'Please input password', trigger: 'blur' }]
        }
      };
    },
    methods: {
      register() {
        this.$refs.registerForm.validate(valid => {
          if (valid) {
            // 在这里处理注册逻辑,比如发送请求给后端保存用户信息
            console.log('Registering...');
          } else {
            return false;
          }
        });
      }
    }
  };
  </script>
  
  <style scoped>
  .register-form {
    width: 300px;
    margin: 0 auto;
  }
  </style>

默认登录的是登陆界面,需要在登陆界面进行跳转,登录界面修改如下:

<template>
    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" label-width="80px" class="login-form">
      <el-form-item label="用户名" prop="username">
        <el-input v-model="loginForm.username" autocomplete="off"></el-input>
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-input type="password" v-model="loginForm.password" autocomplete="off"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="login">登录</el-button>
        <el-button type="primary" @click="goToRegisterPage">注册</el-button>
      </el-form-item>
    </el-form>
  </template>
  
  <script>
  export default {
    data() {
      return {
        loginForm: {
          username: '',
          password: ''
        },
        loginRules: {
          username: [{ required: true, message: 'Please input username', trigger: 'blur' }],
          password: [{ required: true, message: 'Please input password', trigger: 'blur' }]
        }
      };
    },
    methods: {
      login() {
        // 登录逻辑
        console.log('Logging in...');
      },
      goToRegisterPage() {
        this.$router.push('/register');
      }
    }
  };
  </script>
  
  <style scoped>
  .login-form {
    width: 300px;
    margin: 0 auto;
  }
  </style>
  

定义好路由后还是需要在main.js引入定义的路由,修改main.js里的内容如下:

import { createApp } from 'vue'
import './style.css'
import router from './router'; // 引入路由文件
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

import App from './App.vue'

const app = createApp(App)

app.use(ElementPlus)
app.use(router)
app.mount('#app')

引入router后还需要把route-view设置到App.vue里,否则无法实现跳转。

App.vue的内容如下所示:

<template>
  <div id="app">
    <router-view></router-view>
  </div>
</template>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/606209.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

目前市面上堡垒机厂家有哪些?会帮忙部署吗?

随着大家对于网络安全的重视&#xff0c;越来越多的企业准备采购堡垒机了。不少企业在问&#xff0c;目前市面上堡垒机厂家有哪些&#xff1f;会帮忙部署吗&#xff1f;这里我们小编就来简单为大家回答一下&#xff0c;仅供参考哈&#xff01; 目前市面上堡垒机厂家有哪些&…

idea开发工具 项目使用Spring框架开发解决yml配置文件不识别问题,解决方案教程

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 问题点&#xff0c;配置文件不识别 解决流程 添加出来的yml配置文件&#xff0c;点击&#x1f197; 问题已解决 如果问题没有解决的话&#xff0c;第二种方法 这是识别成功的 技术细节 项目重构Maven环境…

libmodbus使用

安装可以看这个博客&#xff1a; https://blog.csdn.net/hanhui22/article/details/105786762 它的安装可以&#xff0c;但是编译测试看不太懂&#xff0c;我没跟着它的编译&#xff0c;完了后把/lib下的 放到开发板的/usr/lib下 编写代码: #include <stdio.h> #inclu…

VS 编译动态链接库dll及其动态链接库的调用方式

VS 编译动态链接库及其动态链接库的调用方式 1编译动态链接库 (1)Step01: 打开VS (2)Step02: 新建项目 (3)Step03: 选择动态链接库&#xff08;搜索DLL&#xff09; (4)Step04: 新建头文件&#xff08;如MyDLL.h) 该文件编写对外暴露的接口函数&#xff0c;即在该函数内声…

deepspeed入门

一、目录 deepspeed 简介库安装配置deepspeed 实现demo如何配置deepspeed参数案例分析 二、实现 deepspeed 简介 Deepspeed是微软的大规模分布式训练工具。专门用于训练超大模型。主要目标是降低训练期间的内存占用、通信开销和计算负载&#xff0c;从而使用户能够训练更大的…

上班不想用脑子写代码了怎么办?那就试试Baidu Comate啊宝贝

本文目录 前言1、视频编程实战1.1、熟悉代码库中的代码1.2、参考现有代码编写新代码 2、下载使用教程3、使用体验3.1、AutoWork 产品测评3.2、解决有关ajax请求后重定向问题3.3、询问编程相关知识3.3.1、cookie和session的区别与联系3.3.2、数据库中主键外键的相关知识 4、问题…

ARTS Week 26

Algorithm 本周的算法题为 35. 搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1:输入: nums [1,…

基于MSOGI的交叉对消谐波信号提取网络MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介&#xff1a; 此模型利用二阶广义积分器&#xff08;SOGI&#xff09;对基波电流和相应次的谐波电流进行取 &#xff0c;具体是通过多个基于二阶广义积分器的正交信号发生器 &#xff08; S&#xf…

python魔法方法是什么

魔法方法是python内置方法&#xff0c;不需要主动调用&#xff0c;存在的目的是为了给python的解释器进行调用&#xff0c;几乎每个魔法方法都有一个对应的内置函数&#xff0c;或者运算符&#xff0c;当我们对这个对象使用这些函数或者运算符时就会调用类中的对应魔法方法&…

可视化-实验四- seaborn工具包绘图基础及关系

一、任务一 1.1 开发环境 多种选择方案&#xff08;大家根据自己的编程习惯&#xff0c;选择适合自己的工具&#xff09;&#xff0c;老师授课如下&#xff1a;Anaconda3Jupter 1.2 特殊包 导入工具包设置中文显示&#xff1a; import matplotlib.pyplot as plt import p…

在做ESP32-S3模组物联网项目时无法烧录下载怎么排查原因?分享经验

ESP32-S3模组在物联网中非常好用&#xff0c;可以做带屏小音箱、温控器、智能86盒、泳池清洁机器人等等&#xff0c;在烧录的时候经常会遇到一些问题&#xff0c;这里分享一些烧录失败的原因或者烧录遇到的问题&#xff0c;教大家怎么排查原因&#xff0c;希望能帮到大家&#…

参数化建模系列-cityengine篇之:如何基于GIS数据快速构建道路三维建模模型

结合上期介绍的基于GIS数据自动化构建城市三维建筑模型&#xff0c;本期在上期的知识点上继续介绍道路模型的自动化构建方法。 数据获取 本期道路自动化建模从获取道路数据开始。 首先打开“QuickOSM”插件&#xff0c;在“Key”中选择“highway”&#xff1b;其次选择数据范…

Python程序设计 函数(三)

练习十一 函数 第1关&#xff1a; 一元二次方程的根 定义一个函数qg&#xff0c;输入一元二次方程的系数a,b,c 当判别式大于0&#xff0c;返回1和两个根 当判别式等于0&#xff0c;返回0和两个根 当判别式小于0&#xff0c;访问-1和两个根 在主程序中&#xff0c;根据函数返回…

数据结构(四)—— 堆和二叉树(上)

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一、树的概念及结构二、二叉树的概念及结构总结 前言 这篇博客我们将进行更加复杂的一种数据结构的学习——树形结构。 一、树的概念及结构 树是一种非线性的数据结构&#xff0c;它是…

如何把多个文件(夹)平均复制到多个文件夹中

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 假定的情况是&#xff0c;共有20个兔兔的图片&#xff0c;想要平均的复制4个文件夹里&#xff0c;那么每个文件夹里面就有5个图片 &#xff08;如果是5个&a…

一般产品:功能、质量、结构

**一般产品&#xff1a;**功能、质量、结构 通用工程&#xff1a; 收益-风险&#xff1b;过程-结果&#xff1b;少数-多数 风险 vs 收益 过程 vs 结果 少数 vs 多数 工程师的特点&#xff1a; 人道无害雇主实事求是&#xff0c;恪守公心&#xff0c;严守纪律&#xff0c;…

信创 | 信创基础设施建设:国内外对比分析研究

信创基础设施建设在国内外的比较分析涉及到多个方面&#xff0c;包括政策支持、产业发展现状、技术进步、市场应用等。通过综合分析&#xff0c;我们可以得出以下结论&#xff1a; 政策支持与发展方向&#xff1a;中国自2019年以来&#xff0c;陆续出台了一系列政策支持信创产业…

RS485空调系统到BACnet江森楼宇系统的高效整合攻略

智慧城市的每一栋建筑都在追求更高的能效与更佳的居住体验&#xff0c;而这一切的实现离不开强大且灵活的楼宇自动化系统。其中&#xff0c;协议转换网关作为连接不同设备的纽带&#xff0c;扮演着至关重要的角色。本文将以一个典型的商业综合体为例&#xff0c;揭秘BACnet协议…

北交所佣金费率标准是多少?北交所相关信息科普

北交所的佣金费率并非固定不变&#xff0c;而是可以根据投资者的需求和证券公司的政策进行调整。目前北交所的佣金费率最低是万分之二。 一般来说&#xff0c;北交所的佣金费率默认在万分之三左右&#xff0c;但这不是固定的费率。根据证券公司的不同&#xff0c;佣金费率可以…

语义分割——前列腺分割数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …
最新文章