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类和继承 prototype属性
Sep 03 Javascript
怎么判断js脚本加载完成
Feb 28 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
Aug 04 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
Jan 22 Javascript
jQuery中slidedown与slideup方法用法示例
Sep 16 Javascript
javascript 通过键名获取键盘的keyCode方法
Dec 31 Javascript
vue移动端路由切换实例分析
May 14 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
Feb 27 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
Jun 22 Javascript
详解Jest结合Vue-test-utils使用的初步实践
Jun 27 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
Jul 19 Javascript
vue特效之翻牌动画
Apr 20 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
php pack与unpack 摸板字符字符含义
2009/10/29 PHP
php 团购折扣计算公式
2011/11/24 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
关于PHP语言构造器介绍
2013/07/08 PHP
PHP中的流(streams)浅析
2015/07/02 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
2017/11/21 PHP
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
JS中表单的使用小结
2014/01/11 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
python生成指定长度的随机数密码
2014/01/23 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
2018/07/25 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
培训讲师邀请函
2014/01/10 职场文书
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
思想工作总结范文
2015/08/12 职场文书
小学数学教师研修日志
2015/11/13 职场文书
纪检部部长竞选稿
2015/11/21 职场文书