当前位置:首页 > VUE

vue-cli实现登录

2026-02-21 20:01:55VUE

使用 Vue CLI 实现登录功能

安装 Vue CLI 并创建项目

确保已安装 Node.js,运行以下命令安装 Vue CLI:

npm install -g @vue/cli

创建新项目:

vue create vue-login-demo

选择默认配置或手动配置(推荐包含 Vue Router 和 Vuex)。

配置路由

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

import Vue from 'vue'
import Router from 'vue-router'
import Login from '@/views/Login.vue'
import Home from '@/views/Home.vue'

Vue.use(Router)

const router = new Router({
  routes: [
    { path: '/', redirect: '/login' },
    { path: '/login', component: Login },
    { path: '/home', component: Home, meta: { requiresAuth: true } }
  ]
})

创建登录页面

src/views/Login.vue 中编写登录表单:

vue-cli实现登录

<template>
  <div>
    <h2>登录</h2>
    <form @submit.prevent="handleLogin">
      <input v-model="username" placeholder="用户名" />
      <input v-model="password" type="password" placeholder="密码" />
      <button type="submit">登录</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    handleLogin() {
      this.$store.dispatch('login', {
        username: this.username,
        password: this.password
      }).then(() => {
        this.$router.push('/home')
      })
    }
  }
}
</script>

使用 Vuex 管理状态

src/store/index.js 中配置登录逻辑:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    isAuthenticated: false,
    user: null
  },
  mutations: {
    SET_AUTH(state, payload) {
      state.isAuthenticated = true
      state.user = payload.user
    }
  },
  actions: {
    login({ commit }, credentials) {
      return new Promise((resolve) => {
        // 模拟 API 调用
        setTimeout(() => {
          commit('SET_AUTH', { user: credentials.username })
          localStorage.setItem('token', 'fake-token')
          resolve()
        }, 500)
      })
    }
  }
})

路由守卫验证

src/router/index.js 中添加全局前置守卫:

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token')
  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login')
  } else {
    next()
  }
})

后端集成(可选)

如需连接真实后端,替换 login action 中的逻辑为实际 API 调用:

vue-cli实现登录

actions: {
  async login({ commit }, credentials) {
    const response = await axios.post('/api/login', credentials)
    commit('SET_AUTH', { user: response.data.user })
    localStorage.setItem('token', response.data.token)
  }
}

样式优化

通过 CSS 或 UI 库(如 Element UI、Vuetify)美化登录页面。例如安装 Element UI:

npm install element-ui

main.js 中引入:

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)

测试运行

启动开发服务器:

npm run serve

访问 http://localhost:8080 测试登录流程。

标签: vuecli
分享给朋友:

相关文章

vue实现屏幕共享

vue实现屏幕共享

Vue 实现屏幕共享的方法 使用 WebRTC 和 getDisplayMedia API 通过 navigator.mediaDevices.getDisplayMedia 捕获屏幕内容,结合 We…

vue实现开关

vue实现开关

Vue 实现开关组件的方法 使用原生HTML和Vue数据绑定 通过v-model绑定复选框的checked状态,结合CSS样式实现开关效果: <template> <label…

vue 实现赋值

vue 实现赋值

Vue 实现赋值的方法 在 Vue 中,赋值操作通常涉及数据绑定和响应式更新。以下是几种常见的赋值方式: 直接赋值给 data 属性 在 Vue 实例的 data 对象中定义的属性可以直接通过 th…

vue实现绘图

vue实现绘图

Vue 实现绘图的方法 在 Vue 中实现绘图功能,可以通过多种方式实现,包括使用原生 HTML5 Canvas、第三方库(如 Fabric.js、Konva.js)或 SVG。以下是几种常见的实现方…

vue实现popover

vue实现popover

Vue 实现 Popover 的方法 使用第三方库(如 Element UI、Ant Design Vue) 许多成熟的 UI 库已经内置了 Popover 组件,可以直接调用。 Element U…

vue实现点击下载

vue实现点击下载

使用 <a> 标签实现下载 在 Vue 中可以通过动态生成 <a> 标签实现文件下载。适用于已知文件 URL 的场景。 <template> <butt…