当前位置:首页 > VUE

vue 实现简单登陆

2026-01-07 04:01:58VUE

以下是一个使用 Vue 3 实现的简单登录功能示例,包含表单验证和基础交互逻辑:

创建 Vue 组件

<template>
  <div class="login-container">
    <h3>用户登录</h3>
    <form @submit.prevent="handleSubmit">
      <div class="form-group">
        <label for="username">用户名</label>
        <input
          type="text"
          id="username"
          v-model="form.username"
          @blur="validateField('username')"
        />
        <span class="error" v-if="errors.username">{{ errors.username }}</span>
      </div>

      <div class="form-group">
        <label for="password">密码</label>
        <input
          type="password"
          id="password"
          v-model="form.password"
          @blur="validateField('password')"
        />
        <span class="error" v-if="errors.password">{{ errors.password }}</span>
      </div>

      <button type="submit" :disabled="isSubmitting">
        {{ isSubmitting ? '登录中...' : '登录' }}
      </button>
    </form>
  </div>
</template>

脚本部分

<script>
import { reactive, ref } from 'vue'

export default {
  setup() {
    const form = reactive({
      username: '',
      password: ''
    })

    const errors = reactive({
      username: '',
      password: ''
    })

    const isSubmitting = ref(false)

    const validateField = (field) => {
      if (field === 'username' && !form.username.trim()) {
        errors.username = '请输入用户名'
      } else if (field === 'password' && !form.password.trim()) {
        errors.password = '请输入密码'
      } else {
        errors[field] = ''
      }
    }

    const handleSubmit = () => {
      validateField('username')
      validateField('password')

      if (!errors.username && !errors.password) {
        isSubmitting.value = true

        // 模拟API调用
        setTimeout(() => {
          alert(`登录成功,欢迎 ${form.username}`)
          isSubmitting.value = false
        }, 1000)
      }
    }

    return {
      form,
      errors,
      isSubmitting,
      validateField,
      handleSubmit
    }
  }
}
</script>

样式部分

<style scoped>
.login-container {
  max-width: 400px;
  margin: 0 auto;
  padding: 20px;
  border: 1px solid #ddd;
  border-radius: 5px;
}

.form-group {
  margin-bottom: 15px;
}

label {
  display: block;
  margin-bottom: 5px;
}

input {
  width: 100%;
  padding: 8px;
  border: 1px solid #ddd;
  border-radius: 4px;
}

button {
  background-color: #42b983;
  color: white;
  padding: 10px 15px;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

button:disabled {
  background-color: #cccccc;
  cursor: not-allowed;
}

.error {
  color: red;
  font-size: 12px;
  display: block;
  margin-top: 5px;
}
</style>

功能说明

  • 使用 Vue 3 的 Composition API 编写
  • 包含基本的表单验证逻辑
  • 提交时禁用按钮防止重复提交
  • 模拟异步登录请求
  • 使用 scoped 样式确保样式隔离

扩展建议

  • 可以添加记住密码功能
  • 实现与后端 API 的真实对接
  • 增加验证码功能
  • 使用 Vue Router 实现登录后跳转

这个示例可以直接复制到 Vue 项目中使用,需要确保项目基于 Vue 3 环境。

vue 实现简单登陆

标签: 简单vue
分享给朋友:

相关文章

vue实现sql操作

vue实现sql操作

在Vue中实现SQL操作通常需要结合后端服务或本地数据库技术,因为前端JavaScript无法直接连接SQL数据库。以下是几种常见的实现方式: 通过API与后端交互 Vue前端通过HTTP请求(如a…

vue手动实现弹窗

vue手动实现弹窗

实现弹窗组件的基本结构 在Vue中手动实现弹窗组件,需要创建一个独立的弹窗组件,并通过props控制其显示与隐藏。弹窗组件通常包含遮罩层、内容区域和关闭按钮。 <template>…

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debo…

vue实现收起展开面板

vue实现收起展开面板

实现收起展开面板的方法 在Vue中实现收起展开面板功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-show或v-if控制显示隐藏 利用Vue的指令可以轻松实现面板的展开和收起:…

vue实现下拉框删除

vue实现下拉框删除

Vue 实现下拉框删除功能 在Vue中实现下拉框的删除功能通常涉及以下步骤: 数据绑定与渲染 在Vue组件中定义数据数组用于存储下拉框选项: data() { return { op…

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要跳…