如何实现Vue路由的二级菜单

目录

Vue路由(一、二级路由)

一级路由配置

二级路由配置

Vue中展示二级路由的默认模块/二级路由默认显示

Vue路由,二级路由及跳转

如何用vue实现二级菜单栏

◼️ 相关参考资料


当朋友们看到这个文章时想必是想要了解vue路由二级菜单相关的知识,这里同时多从个角度为大家介绍vue二级路由的配置相应的内容。

Vue路由(一、二级路由)

是前台为了实现单页面应用然后设置路径,根据不同的路径显示不同页面。但是这些路径在服务器上不是真是存在的。

hash路由:默认的是hash路由,过onhashchange()来检测路由的变化,根据不同的hash来显示不同元素。获取当前的hash值location.hash

history路由:通过onpopstate来检测history堆栈路径的变化,堆栈的路径是通过history.pushState(null, '',"?page=2")添加进去的

由hash路由设置成history路由,给路由添加配置项 mode="history"。

一级路由配置

1、设置相应组件

2、在router-index.js文件中添加路由配置

首先,引入组件,然后配置路由规则 {path:设置路径,name:名,component:组件}

3、在需要当前组件的地方给页面添加<router-view></router-view>

4、设置导航路径

使用vue提供<router-link to="路径"></router-link> ,默认的解析成a标签

5、设置默认路由

6、设置导航链接的样式

二级路由配置

1、需要定义组件

2、确定好在哪个组件配置二级路由,就去哪个组件的配置规则中添加children关键字,按照一级路由的配置方法配置规则

3、在需要配置二级路由的组件中添加<router-view></router-view>

4、设置导航路径

使用vue提供<router-link to="路径"></router-link> ,默认的解析成a标签

5、设置导航链接的样式

我们可以定义一个一级路由,里面可以包裹底部footer组件,让他为二级路由,这时点击底部的二级路由时,就会切换不同的页面,而不需要底部组件显示的时候,那我们再配置一个一级路由就好了!!!

Vue中展示二级路由的默认模块/二级路由默认显示

1. 新建一个二级路由 导入到router/index.js 并配置

2. 在盛放子路由的页面加入router-link 与 router-view标签

3. 点击带有router-link标签的按钮即可展示子路由

Vue路由,二级路由及跳转

* router/index.js文件:

/* 导入Vue构造函数 */
import Vue from "vue";
/* 导入路由VueRouter构造函数 */
import VueRouter from "vue-router";
/* 导入HomeView页面 */
import HomeView from "../views/HomeView.vue";

// 调用构造函数Vue的use方法,传入VueRouter构造函数
// 作用是把VueRouter作为一个插件全局插入到Vue中
Vue.use(VueRouter);

/* 定义一个路由数组对象 */
const routes = [
  /**
   *一个对象就对应了一个路由
   *path 就是路由的地址
   *name 给路由起的名字
   *component 具体跳转的是哪个组件页面
   */
  {
    /* path: '/' 根页面,表示已进入就显示的页面 */
    path: "/",
    name: "home",
    /* 这种方式一进入页面就会全部加载,不是用到的时候再加载,性能没有懒加载的方式好 */
    component: HomeView,
    /* 可以使用redirect重定向,一进入主页就展示第一个子页面,redirect 后面跟的是路径名,并不是name */
    /* 因为/是根路径,所以可以直接写one */
    redirect: "oneview",
    children: [
      {
        path: "oneview",
        name: "oneview",
        component: () => import("../views/OneView.vue"),
      },
    ],
  },
  {
    /* 这里是一级目录所以可以加斜杠/,表示根目录 */
    path: "/about",
    name: "about",
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    /* 懒加载功能:一开始不加载,当你切换路由的时候再加载 */
    component: () =>
      import(/* webpackChunkName: "about" */ "../views/AboutView.vue"),

    /* about不是根路径,所以redirect后面要写全'/about/aboutchild' */
    redirect: "/about/aboutchild",
    children: [
      {
        path: "aboutchild",
        name: "aboutchild",
        component: () => import("../views/AboutChild.vue"),
      },
    ],
  },
  {
    path: "/ChildA",
    name: "ChildA",
    component: () => import("../components/ChildA.vue"),
  },
  {
    path: "/ChildB",
    name: "ChildB",
    component: () => import("../components/ChildB.vue"),
  },
  {
    /* path:'*' 必须要放最后 */
    /* path:'*' 表示上面的路由没有匹配到,则进入下面的页面 */
    path: "*",
    name: "notfound",
    component: () => import("../components/NotFound.vue"),
  },
];

/* 实例化构造函数 VueRouter 产生一个实例化对象,并把上面的路由数组对象routes当作参数 以对象的方式传给构造函数 VueRouter */
const router = new VueRouter({
  routes,
});

/* 把实例化路由对象 router默认导出  */
export default router;

* main.js文件:

/* 导入Vue构造函数 */
import Vue from "vue";
/* 导入App.vue入口页面 */
import App from "./App.vue";
/* 导入router文件夹中的index.js中的router实例化对象 */
/* 因为一个文件夹里面只有一个index.js文件,所以在脚手架中可以把./router/index.js简写为./router  */
import router from "./router";

/* 生产提示 */
/* 改成false是用来关闭开发者提示 */
Vue.config.productionTip = false;
/* 在Vue的对象参数里面配置 el:"#app" 等于.$mount('#app'),都是用来挂载到id为#app的div上的 */
/* 把路由实例化对象router配置在Vue中,作用是保证项目中所有的vue文件都可以使用router路由的属性和方法 */
new Vue({
  router /* 会把所有vue文件渲染到App组件上 */,
  render: (h = h(App)),
}).$mount("#app"); /* 等同于el:"#app" */

* views/App.vue文件:

<template>
  <div id="app">
    <nav>
      <!-- router-link组件是负责路由跳转的,to属性是用来写跳转路径的。router-link组件本质上是用a标签来实现的,路由跳转的原理是根据锚点来的 -->
      <router-link to="/">Home</router-link>
      <router-link to="/about">About</router-link>
      <router-link to="/ChildA">点我跳转ChildA</router-link>
      <router-link to="/ChildB">点我跳转ChildB</router-link>
    </nav>
    <!-- router-view 组件是用来展示组件的容器 -->
    <!-- 创建两个组件ChildA和ChildB,并写两个router-link组件标签可以实现跳转,跳转组件显示在router-view容器中 -->
    <router-view></router-view>
  </div>
</template>
<style scoped>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}

nav {
  padding: 30px;
}

nav a {
  font-weight: bold;
  color: #2c3e50;
}

/* .router-link-exact-active 跳转链接被激活的时候加载到router-link身上 */
nav a.router-link-exact-active {
  color: #42b983;
}
</style>

AboutView.vue文件:

<template>
  <div class="aboutview">
    <h1>This is an AboutView page</h1>
    <!-- to后面写的是路径 -->
    <!-- <router-link to="/about/aboutchild">我是aboutchild</router-link>-->
    <!-- to 后面要加冒号: 作用是把后面解析成一个对象而不是字符串 -->
    <router-link :to="{ name: 'aboutchild' }">我是aboutchild</router-link>
    <!-- 二级路由显示的容器  -->
    <router-view></router-view>
  </div>
</template>
<script>
export default{
  name:"aboutview",
  components: {
    AboutChild",
  },
  
};
</script>

<style scoped>
</style>

* AboutChild.vue文件:

<template>
  <div class=aboutChild>
    <h1>AboutChild</h1>
  </div>
</template>
<script>
export default {
}
</script>
<style scoped></style>

* HomeView.vue文件:

<template>
  <div class="homeview">
    <h1>go!go!go!</h1>
    <router-link to="/oneview">我是OneView</router-link>
    <!-- 二级路由对应的组件容器   -->
    <router-view></router-view>
  </div>
</template>

<script>
export default {
  name: "HomeView",
  components: {OneView},
};
</script>

* OneView.vue文件:

<template>
  <div class="oneview">
    <h1>我是OneView</h1>
  </div>
</template>
<script>
export default {

}
</script>
<style scoped></style>

* components/ChildA.vue文件:

<template>
  <div class="childA">
    <h1>我是childA</h1>
  </div>
</template>
<script>export default {

}
</script>

<style scoped></style>
 

* ChildB.vue文件:

<template>
  <div class="childB">
    <h1>我是childB</h1>
  </div>
</template>
<script>
export default {

}
</script>

<style scoped></style>

* NotFound.vue文件:

<template>
  <div class="notfound">
    <h1>我是NotFound</h1>
  </div>
</template>
<script>
export default {

}
</script>

<style scoped></style>

左边文件目录:

如何用vue实现二级菜单栏

二级菜单导航是一种很普遍的功能,一般网页都会有这个功能。如果是平常的做法就是改变url,跳到相应的页面;还有一种就是frame。

如果用vue的话,可以用vue-router改变router-view里面的组件,这样就能做到不刷新页面都能跳到相应“页面”。其实url地址还是变了,但是他没有刷新页面其他位置的内容,只是改变了router-view里面的组件,渲染了新的组件。

◼️ 相关参考资料

Vue中实现路由跳转传参的4种方式

简单了解一下vue-router是什么

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/71360.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

react学习笔记——4. 虚拟dom中处理动态数据

如下需求 方式1&#xff1a; 直接在ul中使用{data}&#xff0c;是可以遍历数据的&#xff0c;然后如果将data改成下面形式&#xff0c;也是可以实现的。但是如果data是一个对象&#xff0c;则不能便利。 const data [<li>Angular</li>, <li>React</li&g…

【分布式】Viewstamped Replication Revisited

篇前感悟&#xff1a; 阅读分布式系统文章的意义其实并不在于你个人真正地去开发这样一个基于这种协议的系统&#xff0c;因为真正去开发一个高可用的分布式系统实在是太难了&#xff08;对我来说…&#xff09;更多的还是汲取其中的思想&#xff0c;包括设计思路&#xff0c;优…

2023河南萌新联赛第(五)场:郑州轻工业大学-F 布鲁特佛斯

2023河南萌新联赛第&#xff08;五&#xff09;场&#xff1a;郑州轻工业大学-F 布鲁特佛斯 https://ac.nowcoder.com/acm/contest/62977/F 文章目录 2023河南萌新联赛第&#xff08;五&#xff09;场&#xff1a;郑州轻工业大学-F 布鲁特佛斯题意解题思路代码 题意 给定一个…

「C/C++」C/C++可变参数函数

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C」C/C程序设计「Win」Windows程序设计「DSA」数据结构与算法「File」数据文件格式 目录 当你需要…

exec族函数

本节学习exec族函数&#xff0c;并大量参考了以下链接&#xff1a; linux进程---exec族函数(execl, execlp, execle, execv, execvp, execvpe)_云英的博客-CSDN博客 exec族函数函数的作用 我们用fork函数创建新进程后&#xff0c;经常会在新进程中调用exec函数去执行另外一个程…

【数据中台商业化】数据中台微前端实践

一&#xff0c;需求背景 1 业务背景 在以往的业务场景中&#xff0c;用户进入五花八门的菜单体系中&#xff0c;往往会产生迷茫情绪&#xff0c;难以理解平台名称及具体作用&#xff0c;导致数据开发与管理学习成本较高&#xff0c;降低工作效率。为此我们整合从数据接入&…

Node.js |(四)HTTP协议 | 尚硅谷2023版Node.js零基础视频教程

学习视频&#xff1a;尚硅谷2023版Node.js零基础视频教程&#xff0c;nodejs新手到高手 文章目录 &#x1f4da;HTTP概念&#x1f4da;窥探HTTP报文&#x1f4da;请求报文的组成&#x1f407;HTTP请求行&#x1f407;HTTP请求头&#x1f407;HTTP的请求体 &#x1f4da;响应报文…

《连锁零售超市经营数据分析实战》学习笔记

这篇文章整理自 接地气的陈老师 x 和鲸社区 | 连锁零售超市经营数据分析实战 活动业务讲解会【接地气的陈老师】的讲解 更多数据分析动手实践活动欢迎访问>>和鲸社区活动 活动背景 现在你是某零售企业的商业数据分析师&#xff0c;你为管理层提供日常经营数据。到一年年…

亚信科技AntDB数据库与库瀚存储方案完成兼容性互认证,联合方案带来约20%性能提升

近日&#xff0c;亚信科技AntDB数据库与苏州库瀚信息科技有限公司自主研发的RISC-V数据库存储解决方案进行了产品兼容测试。经过双方团队的严格测试&#xff0c;亚信科技AntDB数据库与库瀚数据库存储解决方案完全兼容、运行稳定。除高可用性测试外&#xff0c;双方进一步开展TP…

Linux学习之sed多行模式

N将下一行加入到模式空间 D删除模式空间中的第一个字符到第一个换行符 P打印模式空间中的第一个字符到第一个换行符 doubleSpace.txt里边的内容如下&#xff1a; goo d man使用下边的命令可以实现把上边对应的内容放到doubleSpace.txt。 echo goo >> doubleSpace.txt e…

【TypeScript】this指向,this内置组件

this类型 TypeScript可推导的this类型函数中this默认类型对象中的函数中的this明确this指向 怎么指定this类型 this相关的内置工具类型转换ThisParameterType<>ThisParameterType<>ThisType TypeScript可推导的this类型 函数中this默认类型 对象中的函数中的this…

【elasticSearch系】3.完整搭建详尽版elk

话不多说,我们先看下经典的elk 是由哪些组件搭建组合起来的 elasticSearch和kibana搭建 可以查看之前我搭建elasticsearch和kibana 的这篇文章 logstash搭建 为了和之前我搭建elasticsearch和kibana版本保持一致,这里我们还是选择7.17.3 下载地址 点击下载,这里为了方…

数据库中的连表更新和连表删除

1.连表更新 准备两张表,id一样,但是姓名不一样, 需求根据id让姓名保持一致 执行的sql UPDATE teacher_copy1 AS b INNER JOIN teacher c ON b.TId c.TId set b.tnamec.tname 执行结果 2.连接删除 DELETE a FROMteacher_copy1 AS aINNER JOIN teacher b ON a.TId b.TId

CNN经典网络模型之GoogleNet论文解读

目录 1. GoogleNet 1.1 Inception模块 1.1.1 1x1卷积 1.2 辅助分类器结构 1.3 GoogleNet网络结构图 1. GoogleNet GoogleNet&#xff0c;也被称为Inception-v1&#xff0c;是由Google团队在2014年提出的一种深度卷积神经网络架构&#xff0c;专门用于图像分类和特征提取任…

SWIG使用方法

安装 下载 swigwin软件包&#xff0c;解压到合适的位置&#xff0c;然后将路径添加到环境变量即可。 编写C代码 //vector.hpp class Vector { private:int x;int y; public:Vector(int,int);double abs();void display(); };//vector.cpp #include "vector.hpp" …

中介者模式(C++)

定义 用一个中介对象来封装(封装变化)一系列的对象交互。中介者使各对象不需要显式的相互引用(编译时依赖->运行时依赖)&#xff0c;从而使其耦合松散(管理变化)&#xff0c;而且可以独立地改变它们之间的交互。 应用场景 在软件构建过程中&#xff0c;经常会出现多个对象…

【Linux】TCP协议简介

TCP协议简介 TCP协议格式面向连接1.连接管理机制2.包序管理 可靠传输1.保证数据可靠到达对端2.保证数据的传输效率 面向字节流&#xff34;&#xff23;&#xff30;粘包问题 TCP协议格式 16位源端口号和16位目的端口号&#xff1a;标识数据从哪个进程来&#xff0c;到哪个进程…

二叉树的讲解

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大家三连关注&…

设计模式行为型——状态模式

目录 状态模式的定义 状态模式的实现 状态模式角色 状态模式类图 状态模式举例 状态模式代码实现 状态模式的特点 优点 缺点 使用场景 注意事项 实际应用 在软件开发过程中&#xff0c;应用程序中的部分对象可能会根据不同的情况做出不同的行为&#xff0c;把这种对…

windows环境下打印机无法打印的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…