vue+Vue Router多级侧导航切换路由(页面)的实现代码


Posted in Javascript onDecember 20, 2018

当当当当当~我又来了。

在项目里经常会遇到侧导航切换页面的功能。

如果我们将侧导航做成公共组件,来调用的话,就会在每一个页面都引用该组件,在后期维护的时候比较麻烦,比如改参数。

所以此文将侧导航做成父页面组件,将切换的页面做成子页面,这样只需调用一次即可。大大减少了后期维护的麻烦

涉及功能点

侧导航支持多级

Vue Router的使用方法( 官方文档 )

子父组件的写法

样式:elementUI

效果图

vue+Vue Router多级侧导航切换路由(页面)的实现代码

实现

--- 目录结构

vue+Vue Router多级侧导航切换路由(页面)的实现代码

--- Vue Router的使用方法

首先安装 npm install vue-router

然后在 main.js 中引入

import router from './router'

new Vue({
 el: '#app',
 router,
 components: { App },
 template: '<App/>'
})

--- vue页面使用Vue Router

App.vue 里引用 router-view

router-view 就相当于一个容器,来渲染我们定义的路由

<template>
 <div id="app">
  <router-view></router-view>
 </div>
</template>

最好不要在 App.vue 里写太多内容,把它作为祖父级展示就可以啦,能预防新手使用的一些未知错误,如打包出错之类的。

所以,我在在 App.vue 里引用 router-view 只渲染根页面,而 components/page 下新建了一个 index.vue 页面,用来放侧导航和渲染子页面

<template>
  <div>
    <!--v-sidebar是侧导航-->
    <v-sidebar ></v-sidebar>
    <div class="content" :style="{height: (this.$store.state.bodyHeight-20) + 'px',overflow:'auto'}">
     <div></div>
      <transition name="move" mode="out-in">
      <!--这里的router-view用来渲染子页面-->
      <router-view></router-view>  
      </transition>
    </div>
  </div>
</template>
<script>
 //引入侧导航组件
  import vSidebar from '../common/sideMenu.vue';
  export default {
    data() {
      return {}
    },
    components:{
     //注册侧导航组件
      vSidebar
    },
  }
</script>

到此整个侧导航切换路由的页面结构已经完成了

如果你想了解,怎么实现多级导航,那么可以继续向下看~

我将路由都提出来写在了单独的文件里,这样方便统一维护管理

routerindex.js 将页面路由的名字和引用路径都写好

import Router from 'vue-router';
Vue.use(Router);
export default new Router(
 {
  routes: [
   {
    path: '/',
    name: 'main', component: main,
    children: [
     {
      path: '/inputDisabled',
      component: resolve => require(['../components/page/input/index.vue'], resolve),
      meta: {title: '禁止输入'},
     },
     {
      path: '/indexSelect',
      component: resolve => require(['../components/page/input/indexSelect.vue'], resolve),
      meta: {title: 'select联动'},
     },
     {
      path: '/loadMoreUp',
      component: resolve => require(['../components/page/loadMore/loadMoreUp.vue'], resolve),
      meta: {title: '下拉刷新'},
     },
    ],
   },
  ]
 })

--- 侧导航来啦~

我用的是elementUI里的导航插件。

注意

菜单数据结构,我这里写的是嵌套结构,父级套子级。

而不是并级,用标识来区分。

代码思路就是循环套循环

<template>
 <div class="sidebar">
  <el-menu class="sidebar-el-menu" :default-active="onRoutes" :collapse="collapse" unique-opened router
       collapse-transition>
   <template v-for="item in items" v-cloak>
    <template v-if="item.subset.length!==0">
     <el-submenu :index="item.url" :key="item.url">
      <template slot="title">
       <!--<img :src="item.icon" style="width: 20px;height: 20px"/>-->
       <span slot="title">{{ item.name }}</span>
      </template>
      <el-menu-item v-for="(subItem,i) in item.subset" :key="i" :index="subItem.url">
       <!--<img :src="subItem.icon" style="width: 20px;height: 20px"/>-->
       <span slot="title">{{ subItem.name }}</span>
      </el-menu-item>
     </el-submenu>
    </template>
    <template v-else>
     <el-menu-item :index="item.url" :key="item.url">
      <!--<img :src="item.icon" style="width: 20px;height: 20px"/>-->
      <span slot="title">{{ item.name }}</span>
     </el-menu-item>
    </template>
   </template>
  </el-menu>
 </div>
</template>

<script>
 export default {
  data() {
   return {
    collapse: false,
    items: [{
     name: "elementUI之input",
     url: "",
     subset: [
      {name: "禁止输入", url: "/inputDisabled", subset: []},
      { name: "select联动", url: "/indexSelect", subset: []
     }]
    }, {name: "手机下拉刷新", url: "/loadMoreUp", subset: []}]
   }
  },
  computed: {
   onRoutes() {
    //当前激活菜单的 index
    return this.$route.path.replace('/', '');
   }
  },
 }
</script>

OK 大功告成~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Firefox 无法获取cssRules 的解决办法
Oct 11 Javascript
escape、encodeURI 和 encodeURIComponent 的区别
Mar 02 Javascript
jquery下为Event handler传递动态参数的代码
Jan 06 Javascript
js函数定时器实现定时读取系统实时连接数
Apr 30 Javascript
JavaScript模块随意拖动示例代码
May 27 Javascript
常用Javascript函数与原型功能收藏(必看篇)
Oct 09 Javascript
Bootstrap源码解读排版(1)
Dec 23 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
Dec 14 Javascript
详解一个基于react+webpack的多页面应用配置
Jan 21 Javascript
Vue组件通信的几种实现方法
Apr 25 Javascript
用Vue.js方法创建模板并使用多个模板合成
Jun 28 Javascript
vue在图片上传的时候压缩图片
Nov 18 Vue.js
微信小程序module.exports模块化操作实例浅析
Dec 20 #Javascript
JavaScript类的继承操作实例总结
Dec 20 #Javascript
vue返回上一页面时回到原先滚动的位置的方法
Dec 20 #Javascript
详解Vue.js自定义tipOnce指令用法实例
Dec 19 #Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
Dec 19 #Javascript
JavaScript链式调用实例浅析
Dec 19 #Javascript
浅谈vue后台管理系统权限控制思考与实践
Dec 19 #Javascript
You might like
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
JS交换变量的方法
2015/01/21 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
jQuery实现圣诞节礼物动画案例解析
2016/12/25 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
浅谈Node.js爬虫之网页请求模块
2018/01/11 Javascript
vue 解决循环引用组件报错的问题
2018/09/06 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
VUE项目axios请求头更改Content-Type操作
2020/07/24 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
python虚拟环境迁移方法
2019/01/03 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
python for 循环获取index索引的方法
2019/02/01 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
办公室前台岗位职责
2014/01/04 职场文书
优秀医生事迹材料
2014/02/12 职场文书
人民币符号
2022/02/17 杂记
在vue中import()语法不能传入变量的问题及解决
2022/04/01 Vue.js
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang