当前位置:首页 > VUE

vue实现登录主页

2026-01-18 23:31:46VUE

使用 Vue 实现登录与主页功能

安装 Vue 及相关依赖

确保已安装 Node.js 和 npm/yarn,通过以下命令创建 Vue 项目:

npm init vue@latest my-project
cd my-project
npm install

安装路由和状态管理库(如 Vue Router 和 Pinia):

npm install vue-router pinia

配置路由

src/router/index.js 中配置登录和主页的路由:

import { createRouter, createWebHistory } from 'vue-router'
import Login from '../views/Login.vue'
import Home from '../views/Home.vue'

const routes = [
  { path: '/login', component: Login },
  { path: '/', component: Home, meta: { requiresAuth: true } }
]

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

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

export default router

创建登录组件

src/views/Login.vue 中实现登录表单:

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

<script setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'

const username = ref('')
const password = ref('')
const router = useRouter()

const handleLogin = () => {
  if (username.value && password.value) {
    localStorage.setItem('token', 'dummy-token')
    router.push('/')
  }
}
</script>

创建主页组件

src/views/Home.vue 中实现受保护的主页内容:

<template>
  <div>
    <h1>欢迎来到主页</h1>
    <button @click="handleLogout">退出登录</button>
  </div>
</template>

<script setup>
import { useRouter } from 'vue-router'

const router = useRouter()

const handleLogout = () => {
  localStorage.removeItem('token')
  router.push('/login')
}
</script>

状态管理(可选)

使用 Pinia 管理登录状态(src/stores/auth.js):

import { defineStore } from 'pinia'

export const useAuthStore = defineStore('auth', {
  state: () => ({
    isAuthenticated: !!localStorage.getItem('token')
  }),
  actions: {
    login() {
      this.isAuthenticated = true
    },
    logout() {
      this.isAuthenticated = false
    }
  }
})

集成到主应用

修改 src/main.js 初始化路由和状态管理:

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import { createPinia } from 'pinia'

const app = createApp(App)
app.use(router)
app.use(createPinia())
app.mount('#app')

样式与布局

src/App.vue 中添加基础布局:

vue实现登录主页

<template>
  <router-view />
</template>

关键点说明

  • 路由守卫通过 beforeEach 检查本地存储的 token 实现权限控制
  • 登录成功后将 token 存入 localStorage 并跳转主页
  • 退出登录时清除 token 并返回登录页
  • 使用 Pinia 可集中管理认证状态(需在组件中调用 store 方法)

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

相关文章

vue实现海报

vue实现海报

Vue 实现海报生成方案 使用 html2canvas 库 html2canvas 是一个将 HTML 元素转换为 Canvas 的库,适合将 Vue 组件渲染为海报图片 安装依赖: npm in…

vue 实现登录

vue 实现登录

Vue 实现登录功能 创建登录表单组件 在 Vue 项目中创建一个登录表单组件(如 Login.vue),包含用户名和密码输入框以及提交按钮。使用 v-model 实现双向数据绑定。 <tem…

vue删除实现

vue删除实现

Vue 删除功能的实现方法 在 Vue 中实现删除功能通常涉及以下几个步骤: 方法一:使用数组的 splice 方法 通过索引删除数组中的元素,适用于列表渲染的场景。 methods: {…

vue广播实现

vue广播实现

vue广播实现 在Vue中实现广播功能可以通过事件总线(Event Bus)或Vuex来完成。以下是两种常见的实现方式: 使用事件总线(Event Bus) 事件总线是一种简单的跨组件通信方式,适用…

vue实现单词逆转

vue实现单词逆转

实现单词逆转的方法 在Vue中实现单词逆转可以通过多种方式完成,以下是几种常见的方法: 使用计算属性逆转单词 计算属性是Vue中处理数据逻辑的理想选择。可以通过计算属性来实现单词逆转: &…

vue怎么实现数据

vue怎么实现数据

Vue 数据实现方法 Vue 提供了多种方式来实现数据的绑定和管理,核心是通过响应式系统确保数据与视图的同步。以下是常见的实现方法: 数据绑定 在 Vue 实例的 data 选项中定义数据,Vue…