当前位置:首页 > VUE

vue登录页面实现

2026-02-17 16:53:04VUE

Vue 登录页面实现步骤

创建Vue项目

使用Vue CLI创建新项目:

vue create login-app

安装必要依赖

安装路由和表单验证库(如Vuelidate):

npm install vue-router vuelidate

创建登录组件

src/components下创建Login.vue文件:

<template>
  <div class="login-container">
    <h2>用户登录</h2>
    <form @submit.prevent="handleSubmit">
      <div class="form-group">
        <label>用户名</label>
        <input 
          type="text" 
          v-model="username" 
          required
        >
      </div>
      <div class="form-group">
        <label>密码</label>
        <input 
          type="password" 
          v-model="password" 
          required
        >
      </div>
      <button type="submit">登录</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    handleSubmit() {
      // 这里添加登录逻辑
      console.log('登录信息:', {
        username: this.username,
        password: this.password
      })
    }
  }
}
</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;
  box-sizing: border-box;
}
button {
  background-color: #42b983;
  color: white;
  padding: 10px 15px;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}
</style>

配置路由

src/router/index.js中设置路由:

import Vue from 'vue'
import Router from 'vue-router'
import Login from '../components/Login.vue'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/login',
      name: 'Login',
      component: Login
    }
  ]
})

添加表单验证

使用Vuelidate进行基本验证:

vue登录页面实现

<script>
import { required } from 'vuelidate/lib/validators'

export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  validations: {
    username: { required },
    password: { required }
  },
  methods: {
    handleSubmit() {
      this.$v.$touch()
      if (!this.$v.$invalid) {
        // 验证通过后的逻辑
      }
    }
  }
}
</script>

添加API请求

handleSubmit方法中添加实际登录请求:

methods: {
  async handleSubmit() {
    this.$v.$touch()
    if (!this.$v.$invalid) {
      try {
        const response = await axios.post('/api/login', {
          username: this.username,
          password: this.password
        })
        // 处理登录成功后的逻辑
      } catch (error) {
        // 处理错误
      }
    }
  }
}

添加状态管理

使用Vuex存储登录状态:

// store/index.js
export default new Vuex.Store({
  state: {
    isAuthenticated: false,
    user: null
  },
  mutations: {
    setAuth(state, payload) {
      state.isAuthenticated = payload.isAuthenticated
      state.user = payload.user
    }
  },
  actions: {
    login({ commit }, credentials) {
      return axios.post('/api/login', credentials)
        .then(response => {
          commit('setAuth', {
            isAuthenticated: true,
            user: response.data.user
          })
        })
    }
  }
})

完善登录组件

更新Login.vue使用Vuex:

vue登录页面实现

methods: {
  async handleSubmit() {
    this.$v.$touch()
    if (!this.$v.$invalid) {
      try {
        await this.$store.dispatch('login', {
          username: this.username,
          password: this.password
        })
        this.$router.push('/dashboard')
      } catch (error) {
        alert('登录失败')
      }
    }
  }
}

添加路由守卫

在路由配置中添加导航守卫:

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!store.state.isAuthenticated) {
      next('/login')
    } else {
      next()
    }
  } else {
    next()
  }
})

添加错误提示

在模板中添加验证错误提示:

<div class="form-group">
  <label>用户名</label>
  <input 
    type="text" 
    v-model="username"
    :class="{ 'is-invalid': $v.username.$error }"
  >
  <div v-if="$v.username.$error" class="invalid-feedback">
    用户名不能为空
  </div>
</div>

添加加载状态

在提交时显示加载状态:

data() {
  return {
    username: '',
    password: '',
    isLoading: false
  }
},
methods: {
  async handleSubmit() {
    this.$v.$touch()
    if (!this.$v.$invalid) {
      this.isLoading = true
      try {
        await this.$store.dispatch('login', {
          username: this.username,
          password: this.password
        })
        this.$router.push('/dashboard')
      } catch (error) {
        alert('登录失败')
      } finally {
        this.isLoading = false
      }
    }
  }
}

添加记住我功能

扩展登录表单和数据模型:

<div class="form-group">
  <input type="checkbox" v-model="rememberMe">
  <label>记住我</label>
</div>
data() {
  return {
    username: '',
    password: '',
    rememberMe: false
  }
}

标签: 页面vue
分享给朋友:

相关文章

vue表格实现教学

vue表格实现教学

Vue 表格实现方法 使用原生HTML表格 在Vue模板中直接使用HTML的<table>标签,结合v-for动态渲染数据: <template> <table&…

vue前端实现搜索

vue前端实现搜索

实现搜索功能的基本方法 在Vue中实现搜索功能通常涉及以下几个关键步骤,结合数据绑定、计算属性和方法调用来动态过滤和显示结果。 数据绑定与输入处理 使用v-model双向绑定搜索输入框的值,监听用户…

vue实现选择本地文件

vue实现选择本地文件

实现文件选择功能 在Vue中实现本地文件选择可以通过HTML原生的<input type="file">元素实现。创建一个基本的文件选择组件: <template> &l…

vue实现流程

vue实现流程

Vue 实现流程的基本步骤 安装 Vue.js 可以通过 CDN 引入或使用 npm/yarn 安装。 CDN 方式: <script src="https://cdn.jsdelivr.…

vue实现jqueryui

vue实现jqueryui

Vue 实现 jQuery UI 功能 在 Vue 项目中实现类似 jQuery UI 的功能,可以通过原生 Vue 组件或第三方库来实现。以下是几种常见 jQuery UI 功能的 Vue 替代方案…

vue插件实现

vue插件实现

Vue 插件实现方法 Vue 插件是一种向 Vue 应用程序添加全局功能的机制。插件可以包含全局指令、过滤器、混入、实例方法等。 插件的基本结构 一个 Vue 插件通常是一个对象或函数,需要暴露一个…