vue.js实现左边导航切换右边内容


Posted in Javascript onOctober 21, 2019

本文实例为大家分享了vue.js左边导航切换右边内容的具体代码,供大家参考,具体内容如下

<template>
 <div class="layout-container">
 <y-header>
 <div slot="nav"></div>
 </y-header>
 <div class="w">
 <div class="content">
 <div class="account-sidebar">
  <div class="gray-box ">
  <div class="box-inner">
  <ul class="account-nav">
  <li v-for="(item,i) in nav" :key='i'>
   <a href="javascript:;" >
   <div class="account-nav-primary" @click="tabPrimary(item)" :class="{active:item.isActive}">
    <span>{{item.name}}</span>
    <i class="el-icon-arrow-right"></i>
   </div>
   </a>
   <div v-if="item.secondNav==true">
    <ul class="account-nav-second" v-show="show">
    <li v-for="(itemT,j) in item.navSecond" :key='j' :class="{active:itemT.name===title}"
     @click="tabSecond(itemT)">
     <span>{{itemT.name}}</span>
    </li>
    </ul>
   </div>
  </li>
  </ul>
  </div>
  </div>
  <div class="gray-box sidebar-bottom content-center">
  <div class="img-code">
   <img src="../../assets/static/img-code.png" width="100"/>
  </div>
  <span>扫一扫下载APP</span>
  </div>
 </div>
 <div class="account-content">
  <router-view></router-view>
 </div>
 </div>
 </div>
 <y-footer></y-footer>
 </div>
</template>
<script>
 import YFooter from '/common/footer'
 import YHeader from '/common/header'
 
 export default {
 data () {
 return {
 show: true,
 title: '学院介绍',
 nav: [
  {name: '学院介绍',
  isActive: false,
  secondNav: true, // 是否存在二级菜单,true为存在
  // path: 'background',
  navSecond: [
  {name: '创建背景', path: 'background'},
  {name: '创建单位', path: 'unit'},
  {name: '创建目的'},
  {name: '管理单位'},
  {name: '运行主体'}
  ]
  },
  {name: '关于我们', path: 'aboutMe', isActive: false, secondNav: false}
 ]
 }
 },
 computed: {
 },
 methods: {
 tabSecond (e) {
 this.$router.push({path: '/college/' + e.path})
 },
 tabPrimary (e) {
 let path = this.$route.path.split('/')[2]
 if (e.secondNav) {
 // this.show = !this.show
  if (path === 'aboutMe') {
  this.$router.push({path: '/college/' + e.navSecond[0].path})
  }
 } else {
  this.$router.push({path: '/college/' + e.path})
 }
 }
 },
 created () {
 let path = this.$route.path.split('/')[2]
 this.nav.forEach(item => {
 item.isActive = false
 if (item.secondNav) {
  item.navSecond.forEach(itemT => {
  if (itemT.path === path) {
  this.title = itemT.name
  if (itemT.name === this.title) {
  item.isActive = true // 当属于子菜单时,父菜单高亮
  }
  }
  })
 } else {
  if (item.path === path) {
  this.title = item.name
  item.isActive = true
  }
 }
 })
 },
 components: {
 YFooter,
 YHeader
 },
 watch: {
 $route (to) {
 let path = to.path.split('/')[2]
 this.nav.forEach(item => {
  item.isActive = false
  if (item.secondNav) {
  item.navSecond.forEach(itemT => {
  if (itemT.path === path) {
  this.title = itemT.name
  if (itemT.name === this.title) {
   item.isActive = true // 当属于子菜单时,父菜单高亮
  }
  }
  })
  } else {
  if (item.path === path) {
  this.title = item.name
  item.isActive = true
  }
  }
 })
 }
 }
 }
</script>
<style lang="scss" rel="stylesheet/scss" scoped>
 @import "../../assets/style/mixin";
 .main {
 background: #fff;
 color: #000;
 }
 a {
 color: #000;
 }
 .w {
 padding-top: 40px;
 }
 .img-code {
 margin: 0px auto 12px;
 }
 .content {
 display: flex;
 height: 100%;
 font-size: 16px;
 }
 .sidebar-bottom {
 margin-top: 20px;
 padding: 16px;
 }
 .content-center {
 text-align: center;
 }
 .account-sidebar {
 width: 210px;
 border-radius: 6px;
 .account-nav {
 padding: 15px 0;
 .active {
  color: #0156AC;
 }
 .active a{
  color: #0156AC;
 }
 li:hover {
  a{
  color: #0156AC;
  }
 }
 li {
 position: relative;
 line-height: 48px;
 .account-nav-primary {
  padding: 0px 20px;
  height: 48px;
  span {
  float: left;
  }
  i {
  float: right;
  line-height: 48px;
  font-size: 14px;
  }
 }
 .account-nav-second {
  li {
  list-style: disc;
  list-style-position: inside;
  height: 48px;
  padding: 0 26px;
  text-align: left;
  color: #5B6976;
  cursor: pointer;
  span {
   margin-left: -14px;
   color: #A9B2BC;
  }
  &:hover{
   color: #0156AC;
   span {
   color: #0156AC;
   }
  }
  }
  .active {
  color: #0156AC;
  span {
   color: #0156AC;
  }
  }
 }
 a {
  display: block;
 }
 &.current {
  a {
  position: relative;
  z-index: 1;
  height: 50px;
  background-color: #98AFEE;
  line-height: 50px;
  color: #FFF;
  }
 }
 }
 }
 }
 .account-content {
 margin-left: 24px;
 flex: 1;
 }
</style>

效果图:

vue.js实现左边导航切换右边内容

vue.js实现左边导航切换右边内容

vue.js实现左边导航切换右边内容

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

Javascript 相关文章推荐
Javascript学习笔记一 之 数据类型
Dec 15 Javascript
关于JavaScript中string 的replace
Apr 12 Javascript
JavaScript中json使用自己总结
Aug 13 Javascript
JavaScript常用脚本汇总(一)
Mar 04 Javascript
IE8兼容Jquery.validate.js的问题
Dec 01 Javascript
Bootstrap列表组学习使用
Feb 09 Javascript
js实现彩色条纹滚动条效果
Mar 15 Javascript
浅谈在koa2中实现页面渲染的全局数据
Oct 09 Javascript
JS中Map和ForEach的区别
Feb 05 Javascript
vue引用js文件的多种方式(推荐)
May 17 Javascript
js限制输入框只能输入数字(onkeyup触发)
Sep 28 Javascript
JS实现排行榜文字向上滚动轮播效果
Nov 26 Javascript
vue+element树组件 实现树懒加载的过程详解
Oct 21 #Javascript
JavaScript函数IIFE使用详解
Oct 21 #Javascript
vue实现侧边栏导航效果
Oct 21 #Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
Oct 21 #Javascript
vue-cli基础配置及webpack配置修改的完整步骤
Oct 20 #Javascript
关于Vue中axios的封装实例详解
Oct 20 #Javascript
JavaScript相等运算符的九条规则示例详解
Oct 20 #Javascript
You might like
理解php原理的opcodes(操作码)
2010/10/26 PHP
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
vue中利用Promise封装jsonp并调取数据
2019/06/18 Javascript
js实现简单的打印表格
2020/01/15 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
python的几种矩阵相乘的公式详解
2019/07/10 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
什么是岗位职责
2013/11/12 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
爱国演讲稿500字
2014/05/04 职场文书
物理课外活动总结
2014/08/27 职场文书
拆迁委托协议书
2014/09/15 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
五年级上册复习计划
2015/01/19 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书