Vue前端项目-首页-左侧菜单栏-根据设备决定侧边栏的隐藏情况

本文介绍了在Vue前端项目中如何实现根据设备类型动态显示或隐藏侧边栏。通过创建设备处理文件、在Vuex中定义全局变量device、监听设备变化及调整样式,实现了在移动端隐藏侧边栏的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、完成步骤1和2

1.1、设备处理文件

1.2、主页中引用步骤1.1创建文件

1.3、测试

2、Vuex中定义全局变量 device

2.1、定义 device 变量,并提供修改方法

2.2、提供 device 的get方法

2.3、在进入首页或翻转屏幕时,重新设置 device 的值

3、完成步骤4和5

3.1、修改 index 主页

3.2、移动端样式

4、完成后效果图


实现效果

步骤:

1、当进入 index 页面, 判断当前设备是否是移动端设备, 在控制台输出一下

2、当 如果设备发生翻转的情况,可能会改变当前设备屏幕的分辨率,因此在发生翻转, 再次判断当前设备是否是移动端设备,在控制台输出一下

3、需要在 Vuex 中使用 全局变量 state.device(值为''mobile''表示移动端, 为"desktop"表示桌面端) 来存储当前的设备,在步骤1的时候 给这个 state.device 赋值,在步骤2时候,判断一下是否要改变 state.device 的值

4、为这个 移动端设备 隐藏侧边栏添加样式 

5、动态的给 index 页面侧边栏添加隐藏样式 

补充:

如果判断当前设备是 移动设备 还是 桌面端设备 ?

在项目中规定,屏幕分辨率宽度 > 992 算是桌面端设备, 其余的算 移动端设备

1、完成步骤1和2

1.1、设备处理文件

新建 src / layout /  mixin / ResizeHandle.js 文件, 内容

const { body } = document
const WIDTH = 992 // refer to Bootstrap's responsive design

export default {
  beforeMount() {
    window.addEventListener('resize', this.$_resizeHandler)
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.$_resizeHandler)
  },
  mounted() {
    const isMobile = this.$_isMobile()
    console.log('isMobile=' + isMobile)
  },
  methods: {
    $_isMobile() {
      const rect = body.getBoundingClientRect()
      return rect.width - 1 < WIDTH
    },
    $_resizeHandler() {
      if (!document.hidden) {
        const isMobile = this.$_isMobile()
        if (isMobile) {
          console.log('当前是移动端设备')
        } else {
          console.log('当前是桌面端设备')
        }
      }
    }
  }
}

1.2、主页中引用步骤1.1创建文件

src / layout / index.vue 文件中

import ResizeMixin from './mixin/ResizeHandler'

  mixins: [ResizeMixin]

具体代码:

<template>
  <div
    class="app-wrapper"
    :class="classObj"
  >
    <sidebar class="sidebar-container" />
    <div class="main-container">
      <navbar />
      <app-main />
    </div>
  </div>
</template>

<script type="text/ecmascript-6">
// import AppMain from './components/AppMain.vue'
// import { AppMain, Navbar, Sidebar } from './components'
import { Sidebar, Navbar, AppMain } from './components'
import { mapState } from 'vuex'
import ResizeMixin from './mixin/ResizeHandler'
export default {
  name: 'Lay
### 修改 `gin-vue-admin` 项目中的侧边栏菜单以添加图标 为了在 `gin-vue-admin` 的侧边栏菜单中添加图标,需修改前端部分的路由配置文件以及对应的组件样式。 #### 路由配置调整 在 `src/router/routes.ts` 文件内定义了应用的所有路由。每个菜单项通过对象表示,其中包含路径、名称和其他属性。要为这些菜单项添加图标支持,在现有字段基础上增加 `meta.icon` 属性用于指定图标的类名或具体图标名称[^1]: ```typescript { path: '/example', name: 'Example', // 确保此名字唯一并对应相应的权限控制 ["Example"] component: Layout, redirect: '/example/list', meta: { title: '示例页面', icon: 'el-icon-s-help' }, // 添加icon属性 children: [ { path: 'list', name: 'ExampleList', component: () => import('@/views/example/index.vue'), meta: { title: '列表页', icon: 'el-icon-document' } } ] } ``` 上述代码片段展示了如何向父级和子级路由条目分别加入不同的图标。这里使用的 `"el-icon-*"` 是 Element Plus 组件库提供的图标集合之一;当然也可以根据实际需求选用其他第三方图标集或是自定义 SVG 图标[^2]。 #### 更新 SideMenu 组件逻辑 接着前往负责渲染左侧导航栏的组件(通常位于 `src/layout/components/Sidebar/`) 下找到 `SideMenu.vue` 或者类似的文件。在此处处理显示逻辑时读取路由元数据里的 `icon` 字段,并将其传递给 Icon 组件作为 props 使用[^3]: ```vue <template> <!-- ... --> <MenuItem v-for="item in permission_routers" :key="item.name"> <Icon v-if="item.meta && item.meta.icon" :type="item.meta.icon"></Icon> {{ item.meta.title }} <SubMenu v-if="item.children && item.children.length > 0"> <MenuItem v-for="subItem in item.children" :key="subItem.name"> <Icon v-if="subItem.meta && subItem.meta.icon" :type="subItem.meta.icon"></Icon>{{ subItem.meta.title }} </MenuItem> </SubMenu> </MenuItem> </template> <script setup lang="ts"> import { computed } from "vue"; import { useStore } from "@/store"; const store = useStore(); // 获取有权限访问的路由表 const permission_routers = computed(() => store.getters.permission_routers); </script> ``` 这段模板说明当存在 `meta.icon` 数据时会实例化一个 `<Icon>` 标签来展示相应图形符号。对于多层嵌套结构,则递归遍历所有可能存在的子节点并同样赋予它们各自的图标表现形式。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值