vue-cli 添加顶部导航栏及点击导航菜单,左侧菜单栏切换

2023-11-19

layout-------------模板包含菜单栏等主要框架
router--------------路由管理,根据路由可生成左侧菜单栏

/** When your routing table is too long, you can split it into small modules**/

import Layout from '@/layout'

var search = [
  {
    path: '/supervise/report',
    component: Layout,
    name: 'report',
    meta: { title: '**', icon: 'component' },
    children: [
      {
        path: 'reportCQL',
        component: () => import('@/views/supervise/report/reportCQL'),
        name: 'reportCQL',
        meta: { title: '**', icon: 'icon' }
      }
      ------
    ]
  },
  {
    path: '/supervise/search',
    component: Layout,
    name: 'search',
    meta: { title: '**', icon: 'component' },
    children: [
      {
        path: 'forestQuery',
        component: () => import('@/views/supervise/search/forestQuery'),
        name: 'forestQuery',
        meta: { title: '**', icon: 'search' }
      }
    ]
  }
]
export default {
  getMenuMessage:function () {
    return search;
  }
}

这是一简单路由,具体见https://panjiachen.github.io/vue-element-admin-site/zh/guide/essentials/router-and-nav.html详解
views哈视图s-主要存放.vue也就是具体的页面,多级菜单路由生成
在这里插入图片描述
index.vue代码如下

{
    path: '/nested',
    component: Layout,
    redirect: '/nested/menu1',
    name: 'Nested',
    meta: {
      title: '**',
      icon: 'nested'
    },
    children: [
      {
        path: 'menu1',
        component: () => import('@/views/nested/menu1/index'), // Parent router-view
        name: 'Menu1',
        meta: { title: '**' },
        children: [
          {
            path: 'houselist',
            component: () => import('@/views/house/houselist'),
            name: 'houselist',
            meta: { title: '**' },
            children: [
            。。。。。此处省略

然后回来看layout文件下
index.vue引入
在这里插入图片描述
import { Topbar, Navbar, Sidebar, AppMain } from “./components”;

components: {
Topbar,
Navbar,
Sidebar,
AppMain
},

export { default as Topbar } from './Topbar'
export { default as Navbar } from './Navbar'
export { default as Sidebar } from './Sidebar'
export { default as AppMain } from './AppMain'

components下sidebar文件就是左侧菜单了
TopBar是我们的顶部菜单

<template>
  <div>
    <el-menu
      :default-active="activeIndex"
      class="topbar-menu"
      mode="horizontal"
      @select="handleSelect"
      background-color="#3a3a3a"
      text-color="#bfcbd9"
      active-text-color="#e7ae12"
    >
      <a href="/">
        <img :src="logo" class="topbar-logo" :class="aWidth" />
      </a>
      <div class="title" v-if="sidebar.opened">{{name}}</div>
      <el-menu-item index="0"><a href="/" @click="toggle('0')">首页</a></el-menu-item>
      <el-dropdown class="company-menu"  style="margin-right:20px"  @command="handleCommand">
        <span class="el-dropdown-link">
          {{myCompany}}
          <i class="el-icon-arrow-down el-icon--right"></i>
        </span>
        <el-dropdown-menu slot="dropdown">
          <el-dropdown-item command="e">企业设置</el-dropdown-item>
          <el-dropdown-item command="e">切换企业</el-dropdown-item>
          <el-dropdown-item command="e" divided> 添加企业成员</el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
      <div class="right-menu">
        <el-dropdown class="avatar-container" trigger="click">
          <div class="avatar-wrapper">
            <img :src="avatar+'?imageView2/1/w/80/h/80'" class="user-avatar" />
            <i class="el-icon-caret-bottom" />
          </div>
          <el-dropdown-menu slot="dropdown" class="user-dropdown">
            <router-link to="/user/userInfo">
              <el-dropdown-item><a href="/#/user/userInfo">基本信息</a></el-dropdown-item>
            </router-link>
            <router-link to="/user/SafetyManagement">
              <el-dropdown-item><a href="/#/user/SafetyManagement">安全管理</a></el-dropdown-item>
            </router-link>
            <el-dropdown-item divided>
              <span style="display:block;" @click="logout">退出登录</span>
            </el-dropdown-item>
          </el-dropdown-menu>
        </el-dropdown>
      </div>
    </el-menu>
  </div>
</template>

然后怎么点击顶部菜单左侧菜单也变化-模块
首先要把router路由拆分开
在layout-components-Sidebar文件下index.vue改变菜单参数也就是将router的各个模块分别读取出来
在这里插入图片描述在这里插入图片描述
到这里应该了解一下vuex的mapGetters
参考mapGetters
还有$store.dispatch
dispatch

routes()返回的是菜单的参数,根据不同标识返回不同菜单,当然也可以将菜单存到后台,通过异步请求得到菜单

在顶部菜单Topbar中添加事件
在这里插入图片描述
store文件中,我添加到app中

import Cookies from 'js-cookie'
const state = {
	menuIndex: {
	    opened: Cookies.get('menuIndexStatus') ? Cookies.get('menuIndexStatus') : '0',
	    withoutAnimation: false
	  }
}
const mutations = {
  TOGGLE_MENU: (state, device) => {
    console.log(device)
    state.menuIndex.opened = device
    state.menuIndex.withoutAnimation = false
    Cookies.set('menuIndexStatus', device)
  }
}

const actions = {
  toggleMenu({ commit }, device) {
    commit('TOGGLE_MENU', device)
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
当点击菜单时会改变menuIndex.opened
左菜单添加
import { mapGetters } from "vuex";
......
computed: {
    ...mapGetters([ 'menuIndex']),
........```

有点啰嗦,这里遇到了一个问题,不知道是我这里的问题,还是本身就会出现,当放大缩小浏览器会报
TypeError: Cannot create property 'opened' on string 'desktop'"
没有找到根本原因

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue-cli 添加顶部导航栏及点击导航菜单,左侧菜单栏切换 的相关文章

  • 是否可以限制用户登录 Firebase 应用的设备数量?

    语境 我正在帮助使用 Vue 更新 Cordova 应用程序 以从基于订阅的收入 用户必须付费才能访问该应用程序 转变为基于广告的收入 用户可以免费注册 但将拥有他们在使用应用程序时显示的广告 我们想要做的一部分是限制用户可以拥有帐户的设备
  • 如何为 VueJS 项目设置根/基 URL

    我已经部署了一个VueJS项目到像这样的域www example com 但是 我想将其移动到子文件夹 以便我可以像这样访问它www example com v1 如何设置基础 URL 或根 URLVueJS项目 注意 这与基本 URL 无
  • 如何从 vue 组件调用 App.vue 中的方法

    我有一个 vue 组件和一个 vue 元素声明 如下所示 Vue component todo item template li This is a todo li methods test function I am getting an
  • firestore 安全规则 request.auth.uid 不起作用

    Firestore 安全规则不起作用 帮我 无法读取用户 用户 ID 的文档数据 安全规则 service cloud firestore match databases database documents match users use
  • 如何在Vue3中对setup的内部函数(不是返回)进行单元测试?

    我想这样测试 情况1 错误 无法监视内部属性 因为它不是函数 改为未定义 组件 vue export default setup function outer inner function inner do something for on
  • 模拟安装挂钩 Jest 测试装置

    我正在对组件进行一些单元测试 但是 在某些组件中 我有一些东西在运行mounted使我的测试失败的钩子 我设法模拟了我不需要的方法 但是 我想知道是否有一种解决方法可以模拟mounted钩住自己 components attendeesLi
  • 如何修复套接字 io 中的 400 错误错误请求?

    我有一个前端应用程序 VUE JS 我有一个后端 Nest JS Vue JS 应用程序使用 vue socket io extended 库通过 websockets 从后端获取数据 当 Vue JS 应用程序启动时 我在浏览器中看到错误
  • 如何在Vue中获取输入字段值

    我是 Vue 新手 我需要一些帮助来从输入字段获取值 在我的表格中 我有
  • npm run dev 和 npm run production 之间的区别

    我对 Laravel 和 vue js 很陌生 请让我知道它们之间有什么区别npm run dev and npm run production 这和环境有关系吗 npm run dev创建源映射并且不会缩小 js css 这使得调试和查找
  • Nuxt.js 多个资源的根路由和根级 slugs

    我正在使用 Nuxt 构建一个电子商务前端 我希望为尽可能多的资源提供根级 slugs 最重要的是目录路径和产品 URL 一个明显的方法是使用 Nuxt 文件结构进行路由创建 com category men Tshirt com cate
  • 有没有V型斗篷的反面?

    根据VueJS 文档 https v2 vuejs org v2 api v cloak v cloak 指令可用于隐藏未编译的 Mustache 绑定 直到 Vue 实例准备就绪 换句话说 我可以隐藏一个div或类似的东西 当 vue 准
  • 用变量字符串设置槽的简单方法?

    有许多slot例子 但没有克莱尔和简单 因为我需要 我需要类似的东西 var x Hello slot x 这就是我需要的 在一个具体的例子中 https jsfiddle net 2qdh3x3v https jsfiddle net 2
  • Vue 3 Composition API 提供/注入在单文件组件中不起作用

    我正在使用 Composition API 在 VueJS 3 中创建一个库 我实现了提供 注入 如中所述docs https v3 vuejs org guide composition api provide inject html i
  • 在渲染组件之前从 api 获取数据

    我在渲染页面之前发送 2 个 api 请求 const Profile template profile attributes null photos data function return attributes Profile attr
  • 不知道如何预览我生成的 Nuxt3 应用程序

    我刚刚在静态模式下创建了一个 Nuxt3 但我不想每次都将其推送到 Netlify 进行预览 这是我的nuxt config js 没有改变 import defineNuxtConfig from nuxt export default
  • Vue js动态导入组件

    我有以下父组件 它必须呈现动态子组件列表
  • 在重复内容区域添加

    我有一个菜单组件 简单地说 它接受一个带有一系列选项的道具 并为每个选项在菜单中呈现一个项目 我希望能够根据用例自定义每个菜单项内的标记 因此我在菜单项元素内使用了占位符 你可以在这个中看到一个例子fiddle https jsfiddle
  • Vue警告无法解析组件:ion-icon

    以下的用法如下https ionicons com usage https ionicons com usage the ion icon显示但我收到此警告 Failed to resolve component ion icon 我的步骤
  • 模块构建失败(来自 ./node_modules/babel-loader/lib/index.js)Vue Js

    我从 GitHub 下载了一个我和我的朋友正在开发的项目 但是当我尝试运行时 npm run serve 我收到这个错误 src main js 中的错误 Module build failed from node modules babe
  • 简单的 Vue.js 计算属性说明

    我对 Vue js 并不陌生 但我会再次浏览文档 试图找出我第一次错过的任何内容 我在以下地方看到了这个声明使用计算属性的基本示例部分 https v2 vuejs org v2 guide computed html Basic Exam

随机推荐

  • android系统下使用openGL开发demo

    对openGL早有耳闻 但是刚接触android下的opengl 做个demo学习下 先把opengl的框架搭建起来 只要有如下几个文件 openActivity java 作为启动入口 android通过GLSurfaceView显示op
  • Unity笔记:修改代码执行的默认打开方式

    使用 External Tools 偏好设置可设置用于编写脚本 处理图像和进行源代码控制的外部应用程序 External Script Editor 选择 Unity 应使用哪个应用程序来打开脚本文件 Unity 会自动将正确的参数传递给内
  • js判断输入框不能全是空格

    var sno sno val var sname sname val while sno lastIndexOf gt 0 sname lastIndexOf gt 0 sno sno replace sname sname replac
  • Python图像处理实战:处理和分析图像数据

    引言 在现代数字化时代 人们生产和获取数以亿计的数字图像 具体而言 这些图像数据常用于计算机视觉 模式识别 医学影像 地球观测和卫星遥感等领域 通过高级图像处理技术 可以从这些数据中提取出有用的信息 从而支持实现各种应用 本文主要介绍Pyt
  • JS学习笔记十二——DOM 操作

    DOM 操作 一 DOM 操作 二 结语 一 DOM 操作 DOM 全名为 Document Object Model 是一整套操作文档流相关内容的属性和方法 这些方法可以用于操作元素修改样式 修改属性 改变位置 添加事件等 DOM 操作内
  • Selenium成长之路-26分页处理

    很长时间没有补充selenium 的脚本了 今天有小朋友问我 如何定位分页 告诉完 索性把代码贴出来 gt gt gt url 填写自己项目中的url地址即可 上代码 coding utf 8 auth carl DJ time 2020
  • 新手教程02:使用makefile脚本进行VCS逻辑仿真

    目录 前言 使用makefile脚本的方式使用VCS 1 新建文件夹 存放需要仿真的rtl代码 2 生成 filelist f 文件 罗列所有rtl文件的路径 3 书写makefile脚本 4 terimal中运行命令 进行仿真 总结 前言
  • jmeter使用教程之验证码登录接口(工作日记)

    首先我们打开jmeter 快捷按钮 win r 会弹出快捷运行弹框 我们输入cmd 后点击回车 会弹出一个控制窗口 我们输入jmeter 然后回车 首次进入jmeter 页面显示空白页且默认英文 我们可以切换语言 Options Choos
  • Flutter 仿朋友圈查看大图,Swiper支持滑动

    Swiper支持多图片预览 左右切换 flutter swiper插件传送地址 先上效果图 1 导入引用到pubspec yaml文件里面 引入后记得pub get flutter swiper 1 1 6 2 写一个图片的集合 可以使用本
  • Nginx配置安全策略总结

    Nginx配置安全策略总结 Content Security Policy 头缺失或不安全 X Content Type Options 头缺失或不安全 X XSS Protection 头缺失或不安全 HTTP Strict Transp
  • SpringCloud——GateWay网关(详解+案例)

    目录 一 相关概念 1 网关概念 2 网关作用 3 网关架构图 4 网关三大核心 二 案例 1 案例说明 2 搭建GateWay网关9527服务 1 创建maven工程 2 导入依赖 3 配置application yml文件 4 创建主启
  • 深入了解== 和 equals的比较

    原文链接 https blog csdn net qq 41841247 article details 106987762
  • SMI/慧荣/SM32**主控量产通用教程,PNY U盘量产!

    我的PNY 8G U盘已多次量产测试 绝对可用 SMI 慧荣主控 SMI主控应该都能通用 我量产后 型号变成SM321 325了 这个可以改的 量产的时候 量产前 PNP设备 ID VID 154B PID 0 044 设备备序列号 AAA
  • Mysql高可用高性能存储应用系列2 - 深入理解锁和Mvcc

    概述 Mysql数据库在处理并发中下了很多功夫 锁是为了更好的保护数据的正确和可靠 Mvcc是维持一个数据的多个版本 使得读写操作没有冲突的解决并发的数据库方案 锁 当数据访问多了 就会出现并发的问题 Mysql锁设计的初衷是处理并发问题
  • vite 创建vue.js项目及vant安装

    1 npm create vitejs app 2 project name select framework select variant 3 cd wx vant 4 npm install 5 npm run dev 6 npm i
  • Linux 内存管理

    摘要 本章首先以应用程序开发者的角度审视Linux的进程内存管理 在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法 力求从外到内 水到渠成地引导网友分析Linux的内存管理与使用 在本章最后 我们给出一个内存映射的实例 帮
  • 你不知道的js

    作用域 LHS RHS 区别 如果 RHS 查询在所有嵌套的作用域中遍寻不到所需的变量 引擎就会抛出 ReferenceError 异常 值得注意的是 ReferenceError 是非常重要的异常类型 相较之下 当引擎执行 LHS 查询时
  • 循环单链表(C语言版)

    前言 小可爱们 本次一起来看看循环单链表吧 嘻嘻 一 循环单链表的定义 循环单链表是单链表的另一种形式 其结构特点链表中最后一个结点的指针域不再是结束标记 而是指向整个链表的第一个结点 从而使链表形成一个环 和单链表相同 循环链表也有带头结
  • 量化涌现:信息论方法识别多变量数据中的因果涌现

    来源 集智俱乐部 作者 Fernando E Rosas Pedro A M Mediano Henrik J Jensen等 译者 潘佳栋 审校 梁金 编辑 邓一雪 导语 大量个体聚集起来 常常涌现出新的复杂结构 鸟儿聚集起来形成兼具灵活
  • vue-cli 添加顶部导航栏及点击导航菜单,左侧菜单栏切换

    layout 模板包含菜单栏等主要框架 router 路由管理 根据路由可生成左侧菜单栏 When your routing table is too long you can split it into small modules imp