当前位置: 首页 > news >正文

vue3:十一、主页面布局(优化页面跳转方式)

:router="true"

一、参考文章

vue3:十一、主页面布局(实现基本左侧菜单+右侧内容效果)-CSDN博客

参考上述文章可知,页面跳转是通过在js中定义的菜单中携带的path,然后通过菜单的点击事件完成的跳转,现在可以进行优化,直接将路径写入视图层的菜单标题即可完成跳转

二、具体实现

1、移除click事件

2、在菜单容器中写入方法

开启组件中页面的路由功能

这里的路由跳转是根据index的值进行的跳转 ,现在索引写的都是1,2,3...;1-1,1-2,1-3...,所以需要替换成具体路径

例如:

修改前,点击一个菜单进行跳转

 对应的路径就显示的是当前index的信息

所以需要将这个index修改为指定的路径

3、修改index

index其实应该是一个唯一的值,只要各个标题之间不重复就行

将index的值修改为对应的path,这里只是具体要跳转的标题才是使用跳转功能,像可展开项的容器就无需跳转,直接采用之前的索引即可

三、完整代码

src/layout/index.vue

<template>
  <el-container class="layout-container-demo" style="height: 100vh">
    <el-aside width="200px">
      <el-scrollbar>
        <!-- default-openeds:默认展开菜单 -->
        <el-menu :default-openeds="['1', '2']" :router="true">
          <!-- 遍历一级菜单 -->
          <template v-for="(item, index) in menu" :key="index">
            <!-- 如果一级菜单有子菜单,渲染 el-sub-menu -->
            <el-sub-menu v-if="item.children && item.children.length > 0" :index="`${index + 1}`">
              <template #title>
                <el-icon v-if="item.icon">
                  <component :is="item.icon" />
                </el-icon>
                {{ item.name }}
              </template>
              <!-- 遍历二级菜单 -->
              <el-menu-item v-for="(secondmenu, secondindex) in item.children" :key="secondindex"
                :index="secondmenu.path">
                {{ secondmenu.name }}
              </el-menu-item>
            </el-sub-menu>
            <!-- 如果一级菜单没有子菜单,渲染 el-menu-item -->
            <el-menu-item v-else :index="item.path">
              <el-icon v-if="item.icon">
                <component :is="item.icon" />
              </el-icon>
              {{ item.name }}
            </el-menu-item>
          </template>
        </el-menu>
      </el-scrollbar>
    </el-aside>

    <el-container>
      <el-header style="text-align: right; font-size: 12px">
        <div class="toolbar">
          <el-dropdown>
            <el-icon style="margin-right: 8px; margin-top: 1px">
              <setting />
            </el-icon>
            <template #dropdown>
              <el-dropdown-menu>
                <el-dropdown-item>View</el-dropdown-item>
                <el-dropdown-item>Add</el-dropdown-item>
                <el-dropdown-item>Delete</el-dropdown-item>
              </el-dropdown-menu>
            </template>
          </el-dropdown>
          <span>Tom</span>
        </div>
      </el-header>
      <!-- 右侧内容 -->
      <el-main>
        <el-scrollbar>
          <RouterView />
        </el-scrollbar>
      </el-main>
      <!-- 底部信息 -->
      <el-footer class="flex flex-center">
        <span>@2025-2030 wen</span>
      </el-footer>
    </el-container>
  </el-container>
</template>

<script setup>
import { reactive } from 'vue'
// 菜单
const menu = reactive([
  {
    name: 'Navigator One',
    icon: "message",
    path: '/about',
  },
  {
    name: 'Navigator Two',
    icon: "message",
    children: [
      {
        name: 'Option 1',
        path: '/home',
      },
      {
        name: 'Option 2',
      },
      {
        name: 'Option 3',
      },
      {
        name: 'Option 4',
      },
    ]
  },
]);
</script>

<style scoped>
.layout-container-demo .el-header {
  position: relative;
  background-color: var(--el-color-primary-light-7);
  color: var(--el-text-color-primary);
}

.layout-container-demo .el-aside {
  color: var(--el-text-color-primary);
  background: var(--el-color-primary-light-8);
}

.layout-container-demo .el-menu {
  border-right: none;
}

.layout-container-demo .el-main {
  padding: 0;
}

.layout-container-demo .toolbar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 100%;
  right: 20px;
}
</style>

相关文章:

  • 网络层之IP协议
  • MySQL拒绝访问
  • 使用Docker部署MySQL8.0.29
  • SpringDoc和Swagger使用
  • LeetCode 热题 100_划分字母区间(80_763_中等_C++)(贪心算法(求并集))
  • 点亮STM32最小系统板LED灯
  • 烧结银技术赋能新能源汽车超级快充与高效驱动
  • C/C++转换为字符串宏和字符串拼接宏的综合使用
  • [HY000][1366] Incorrect string value: ‘张三‘ for column ‘name‘ at row 1
  • 基于vue框架的在线影院系统a079l(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 鸿蒙生态开发
  • 【Java】深入了解下Java Bitset
  • SOFABoot-09-模块隔离
  • 计算机的基本组合和工作原理
  • 日志2333
  • 大模型幻觉产生的【九大原因】
  • Browser Use Web UI 本地部署完全指南:从入门到精通
  • 分享最近前端面试遇到的一些问题
  • bootstrap 表格插件bootstrap table 的使用经验谈!
  • ✨【数据变形术:联合体在通信协议中的降维打击】✨
  • 韩国代总统、国务总理韩德洙宣布辞职,将择期宣布参选总统
  • 女冰队长于柏巍,拒绝被年龄定义
  • 日菲同意扩大安全合作,外交部:反对任何在本地区拉帮结派的做法
  • 外交部:美方应在平等、尊重和互惠的基础上同中方开展对话
  • 一季度全国城镇新增就业308万人
  • 高璞任中国第一汽车集团有限公司党委常委、副总经理