日常练习一部分

这一次练习不使用后端,只进行对使用vue3的前端练习,包括两种不同的跳转方式:
我的部分代码大致如下:
DashboardView.vue:

<template>
  <div>
    <h1>仪表盘视图</h1>
    <p>这是您的个人仪表盘,显示各种统计信息。</p>
    
    <div class="stats-container">
      <div class="stat-card">
        <h3>访问量</h3>
        <p class="stat-value">1,254</p>
      </div>
      <div class="stat-card">
        <h3>用户数</h3>
        <p class="stat-value">548</p>
      </div>
      <div class="stat-card">
        <h3>完成率</h3>
        <p class="stat-value">89%</p>
      </div>
    </div>
    
    <button class="btn back-btn" @click="goHome">返回首页</button>
  </div>
</template>

<script>
export default {
  methods: {
    goHome() {
      this.$router.push({ name: 'home' });
    }
  }
}
</script>

<style scoped>
.stats-container {
  display: flex;
  justify-content: center;
  gap: 20px;
  margin: 40px 0;
}

.stat-card {
  background: linear-gradient(135deg, #f0f7ff, #e6f2ff);
  border-radius: 12px;
  padding: 20px;
  text-align: center;
  min-width: 150px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
}

.stat-value {
  font-size: 2.2rem;
  font-weight: 700;
  color: #2c3e50;
  margin: 10px 0;
}

.back-btn {
  margin-top: 30px;
}
</style>

HomeView.vue``

<template>
  <div>
    <div class="nav-container">
      <router-link :to="{ name: 'home' }" class="nav-link" active-class="active">首页</router-link>
      <router-link to="/dashboard" class="nav-link" active-class="active">仪表盘</router-link>
      <router-link to="/profile" class="nav-link" active-class="active">个人中心</router-link>
    </div>
    <h1>欢迎来到首页</h1>
    <p>这是一个使用Vue构建的多页面应用示例。点击下方按钮切换到不同视图。</p>
    
    <div class="button-container">
      <button class="btn" @click="switchView('dashboard')">查看仪表盘</button>
      <button class="btn" @click="switchView('profile')">查看个人中心</button>
      <button class="btn about-btn" @click="goToAbout">前往关于页</button>
    </div>
  </div>
</template>

<script>
export default {
  name: 'HomeView',
  methods: {
    switchView(viewName) {
      this.$router.push({ name: viewName })
    },
    goToAbout() {
      this.addLoadingToButton('.about-btn');
      setTimeout(() => {
        window.location.href = 'about.html';
      }, 500);
    },
    addLoadingToButton(selector) {
      const btn = document.querySelector(selector);
      if (btn) btn.classList.add('loading');
    }
  }
}
</script>

ProfileView.vue

<template>
  <div>
    <h1>个人中心</h1>
    <p>这是您的个人信息页面。</p>
    
    <div class="profile-card">
      <div class="avatar">
        <div class="avatar-initial">U</div>
      </div>
      <div class="profile-info">
        <h3>用户名</h3>
        <p>user@example.com</p>
        <p>会员状态: <span class="premium">高级会员</span></p>
      </div>
    </div>
    
    <button class="btn back-btn" @click="goHome">返回首页</button>
  </div>
</template>

<script>
export default {
  methods: {
    goHome() {
      this.$router.push({ name: 'home' });
    }
  }
}
</script>

<style scoped>
.profile-card {
  display: flex;
  align-items: center;
  gap: 25px;
  background: white;
  border-radius: 15px;
  padding: 25px;
  margin: 30px auto;
  max-width: 500px;
  box-shadow: 0 5px 15px rgba(0, 0, 0, 0.08);
}

.avatar {
  width: 80px;
  height: 80px;
  border-radius: 50%;
  background: linear-gradient(135deg, #6a11cb, #2575fc);
  display: flex;
  align-items: center;
  justify-content: center;
}

.avatar-initial {
  font-size: 2.5rem;
  font-weight: bold;
  color: white;
}

.profile-info h3 {
  font-size: 1.8rem;
  margin-bottom: 10px;
}

.premium {
  color: #ff7e5f;
  font-weight: 700;
}

.back-btn {
  margin-top: 30px;
}
</style>

router.js:

import { createRouter, createWebHashHistory } from 'vue-router'
// 导入视图组件
const HomeView = () => import('./views/HomeView.vue')
const DashboardView = () => import('./views/DashboardView.vue')
const ProfileView = () => import('./views/ProfileView.vue')

const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView,
    meta: { title: '首页' }
  },
  {
    path: '/dashboard',
    name: 'dashboard',
    component: DashboardView,
    meta: { title: '仪表盘' }
  },
  {
    path: '/profile',
    name: 'profile',
    component: ProfileView,
    meta: { title: '个人中心' }
  }
]

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

router.beforeEach((to) => {
  document.title = to.meta.title || '默认标题';
});

export default router

这一个部分就能实现单页面跳转,如下图:
image

posted @ 2025-09-14 21:49  老汤姆233  阅读(3)  评论(0)    收藏  举报