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 相关文章推荐
翻译整理的jQuery使用查询手册
Mar 07 Javascript
javascript 的Document属性和方法集合
Jan 25 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
Mar 11 Javascript
javascript删除option选项的多种方法总结
Nov 22 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
Dec 11 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
Sep 15 Javascript
前端js实现文件的断点续传 后端PHP文件接收
Oct 14 Javascript
bootstrap datepicker插件默认英文修改为中文
Jul 28 Javascript
浅谈vuex之mutation和action的基本使用
Aug 29 Javascript
VSCode配置react开发环境的步骤
Dec 27 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
Mar 28 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
Jul 12 jQuery
微信小程序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 常见郁闷问题答解
2006/11/25 PHP
php 多线程上下文中安全写文件实现代码
2009/12/28 PHP
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
JavaScript 数组循环引起的思考
2010/01/01 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
2018/10/12 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
Python中collections模块的基本使用教程
2018/12/07 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
Python 根据日志级别打印不同颜色的日志的方法示例
2019/08/08 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
过滤器的用法
2013/10/08 面试题
大学生就业自荐书
2014/06/16 职场文书
公司领导班子对照材料
2014/08/18 职场文书
班主任自我评价范文
2015/03/11 职场文书
工地食品安全责任书
2015/05/09 职场文书
详解Html5项目适配系统深色模式方案总结
2021/04/14 HTML / CSS
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS