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 相关文章推荐
在JavaScript中实现命名空间
Nov 23 Javascript
原生javascript实现图片轮播效果代码
Sep 03 Javascript
jQuery编写widget的一些技巧分享
Oct 28 Javascript
JQUERY设置IFRAME的SRC值的代码
Nov 30 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
Nov 20 Javascript
javascript实现左右控制无缝滚动
Dec 31 Javascript
JavaScript中使用Callback控制流程介绍
Mar 16 Javascript
JQuery实现鼠标移动图片显示描述层的方法
Jun 25 Javascript
ES6基础之 Promise 对象用法实例详解
Aug 22 Javascript
浅谈webpack和webpack-cli模块源码分析
Jan 19 Javascript
js代码编写无缝轮播图
Sep 13 Javascript
uni-app使用countdown插件实现倒计时
Nov 01 Javascript
微信小程序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
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
php提交表单发送邮件的方法
2015/03/20 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
jQuery获取当前对象标签名称的方法
2014/02/07 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
2017/01/09 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
Python动态赋值的陷阱知识点总结
2019/03/17 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
Python递归函数特点及原理解析
2020/03/04 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
CSS3的RGBA中关于整数和百分比值的转换
2015/08/04 HTML / CSS
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
大学生毕业自我评价范文分享
2013/11/11 职场文书
外贸英文求职信范文
2015/03/19 职场文书
湘江北去观后感
2015/06/15 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
2016个人廉洁自律承诺书
2016/03/25 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android