vue+iview的菜单与页签的联动方式

vue+iview菜单与页签联动

最近在使用vue+iview开发一个后台管理类的系统,希望做一个点击左侧菜单右侧的页签与内容都能相对应的改变。

但搞了好久的路由也没有实现这个功能。

刚开始使用vue+iview不知道iview-admin可以直接拿来使用,布局之类的开箱即用,可是自己的demo已经写了好久不忍心放弃。

一、使用iview的menu和tab做布局,将这两个组件放到主页面

由于menu与tab的数据相同且样式需要进行关联,因此可以使用vuex进行状态管理,state中写入需要管理的数据和状态变量,在mutations中设置操作的动作,actions中监听一些行为(我的菜单没有展开收缩部分,因此并没有使用到actions)

二、做好布局之后要对菜单增加点击事件

on-select,首先在mutations中注册tab的改变事件,当左侧菜单点击的时候查看tab中是否已经有这个页签并设置isExist=false,如果存在,isExist修改为true,没有的话给tab对应遍历的数组增加菜单相对索引的数据。

mutationsType中

mutations中:

menu组件中的事件为:

在tab组件中首先设置页面默认路由:

再将事件加入进去:

iview+Vue多级菜单的联动

用最笨的方式写了一个三级菜单的联动

<template>
  <div>
    <Select v-model="whereMap.model1"
            style="width:200px"
            @on-change="getSecond">
      <Option v-for="item in list1"
              :value="item.id"
              :key="item.id">{{ item.label }}</Option>
    </Select>
    <Select v-model="whereMap.model2"
            style="width:200px"
            @on-change="getThird">
      <Option v-for="item in list2"
              :value="item.id"
              :key="item.id">{{ item.label }}</Option>
    </Select>
    <Select v-model="whereMap.model3"
            style="width:200px">
      <Option v-for="item in list3"
              :value="item.id"
              :key="item.id">{{ item.label }}</Option>
    </Select>
    <Button class="search-btn"
            type="default"
            @click="searchClear">清空</Button></div>
</template>
<script>
export default {
  data () {
    return {
      datatest: {
        l1: [
          {
            id: 'cat',
            label: '猫'
          },
          {
            id: 'dog',
            label: '狗'
          }
        ],
        l2: {
          cat: [{ id: 'sc', label: '小猫' }, { id: 'bc', label: '大猫' }],
          dog: [{ id: 'sd', label: '小狗' }, { id: 'bd', label: '大狗' }]
        },
        l3: {
          sc: [{ id: 'sc1', label: '小花猫' }, { id: 'sc2', label: '小橘猫' }],
          bc: [{ id: 'bc1', label: '大花猫' }, { id: 'bc2', label: '大橘猫' }]
        }
      },
      list1: [],
      list2: [],
      list3: [],
      whereMap: {
        model1: '',
        model2: '',
        model3: ''
      }
    }
  },
  mounted () { this.init() },
  created () {
    this.init()
  },
  methods: {
    init () {
      this.list1 = this.datatest.l1
    },
    getSecond (val) {
      this.list2 = this.datatest.l2[val]
    },
    getThird (val) {

      this.list3 = this.datatest.l3[val]
    },
    searchClear () {
      console.log(this.whereMap)
      this.whereMap = {};
      this.list2 = [];
      this.list3 = [];
    }
  }
}
</script>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue+iview框架实现左侧动态菜单功能的示例代码

    最近在使用vue-cli3配合iview框架搭建新的项目中用到了iview中的menu菜单,按照官网写法固定不太好,因为一般项目都是从后端动态获取菜单列表,所以我们需要将官网代码稍作修改,代码如下: 注意事项: [1]菜单高亮部分动态绑定路由跳转的页面 Menu组件中有一个active-name反映的是当前高亮区域,因此可以动态的绑定active-name来实现高亮显示.前提是需要将MenuItem绑定的name也设置成页面路由的name [2]动态获取菜单数据,需要更新菜单 this.$nex

  • Vue实现左右菜单联动实现代码

    本文介绍了Vue实现左右菜单联动实现代码吗,分享给大家,也给自己留个笔记,具体如下: Github 源码传送门: Rain120/vue-study 之前在外卖软件上看到这个左右联动的效果,觉得很有意思,所以就尝试使用 Vue 来实现,将这个联动抽离成为一个单独的组件,废话少说,先来一张效果图. 这个组件分为两个部分,1.左菜单:2.右菜单. 左菜单的 DOM 结构 <scroll class="left-menu" :data="leftMenu" ref=

  • 详解element-ui级联菜单(城市三级联动菜单)和回显问题

    代码最下面 各项的参数截图 代码如下 <el-form-item label="户籍所在地" prop="censusLand" style="padding-left:57px"> <el-cascader v-model="ruleForm.censusLand" style="width:180px;padding-left:7px;width:270px" placeholder=

  • vue elementUI使用tabs与导航栏联动

    不使用tabs标签页时,点击导航菜单,router-view映射相应的组件即可显示页面.但我们想在点击导航栏时在tabs中映射相应的组件,这就需要使用tabs组件 在slider.vue中点击路由后,把当前选择的路由@select使用bus传出去 <el-menu class="sidebar-el-menu" :default-active="onRoutes" :collapse="collapse" background-color=

  • vue+iview的菜单与页签的联动方式

    vue+iview菜单与页签联动 最近在使用vue+iview开发一个后台管理类的系统,希望做一个点击左侧菜单右侧的页签与内容都能相对应的改变. 但搞了好久的路由也没有实现这个功能. 刚开始使用vue+iview不知道iview-admin可以直接拿来使用,布局之类的开箱即用,可是自己的demo已经写了好久不忍心放弃. 一.使用iview的menu和tab做布局,将这两个组件放到主页面 由于menu与tab的数据相同且样式需要进行关联,因此可以使用vuex进行状态管理,state中写入需要管理的

  • vue iview的菜单组件Mune 点击不高亮的解决方案

    前言: 在项目中,我用到了vue +iview + vue-router 开发: 然后导航条就使用了iview的Menu组件,结果发觉导航条的内容点击一次之后不会显示高亮样式,而是先跳转了,我再点击一次,才会高亮显示. 在看了vue-router的文档之后,发觉有一个很好用的东西,就是router-link的属性: active-class 和 exact. 为什么要使用router-link? 官网上说明了这几点好处: 组件支持用户在具有路由功能的应用中(点击)导航. 通过 to 属性指定目标

  • Vue实现多页签组件

    直接看效果,增加了右键菜单,分别有重新加载.关闭左边.关闭右边.关闭其他功能. 也可以到我的github上看看代码(如果觉得这个组件有用的话,别忘了顺手给个小星星) 代码:https://github.com/Caijt/VuePageTab 演示:https://caijt.github.io/VuePageTab/ 我这个多页签组件里面的删除缓存的方法不是使用keep-alive组件自带的include.exculde结合的效果,而是使用暴力删除缓存的方法,这个在上个博客中也有提到,用这种方

  • vue实现tagsview多页签导航功能的示例代码

    目录 前言 一.效果图 二.实现思路 1. 新建 tags-view.js 2. 在Vuex里面引入 tags-view.js 3. 新建 tabsView 组件 4. 新建 ScrollPane 组件 5. 引入 tabsView 组件 6. 使用 keep-alive 组件,进行页签的缓存 总结 前言 基本上后台管理系统都需要有多页签的功能,但是因为一些脚手架项目基本都把这个功能给集成好了,导致在学习或者修改的时候不知道该如何下手.今天这篇文章就来聊一聊,vue-element-admin项

  • vue使用keep-alive如何实现多页签并支持强制刷新

    目录 使用keep-alive实现多页签并支持强制刷新 需求 思路 已打开菜单组件 Home页面 使用keep-alive以后刷新部分数据如何解决 项目中遇到得问题 使用keep-alive实现多页签并支持强制刷新 需求 我司有一款使用Vue构建的SPA 后台管理系统,此时客户提出一个需求. 1:要求支持打开多页签 2:多页签保留状态,即切换页签的时候不重新刷新内容. 3:关闭某一页签之后,重新打开之后,需要进行刷新 4:在当前页面可以进行强制刷新功能. 如图示意(左侧箭头为多页签,右侧为强制刷

  • vue iview实现动态路由和权限验证功能

    github上关于vue动态添加路由的例子很多,本项目参考了部分项目后,在iview框架基础上完成了动态路由的动态添加和菜单刷新.为了帮助其他需要的朋友,现分享出实现逻辑,欢迎一起交流学习. Github地址 iview-dynamicRouter 实现目标 客户端从服务端拿到路由和权限数据后,刷新项目的路由和菜单列表,并进行权限控制. 项目基础 基础框架: iview组件库官方模板项目 iview-admin 的template分支项目,此项目为 iview-admin 的基础框架代码.项目地

  • 可以自动轮换的页签 tabs with auto play fucntion

    tabs with auto play function 默认事件 } } };clik(); } timertab("tab_01",2); } //--> tab_01 tab_02 tab_03 link1 link2 link3 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] a1 a2 a3 /*参数说明: t:导航容器的ID to:导航的单位元素标签 c:内容的容器ID co:内容的单位元素标签 s:初始化时的当前项 a:内容的单位元素标签ID中的数字序号

  • Android实现图片滚动和页签控件功能的实现代码

    首先题外话,今天早上起床的时候,手滑一下把我的手机甩了出去,结果陪伴我两年半的摩托罗拉里程碑一代就这么安息了,于是我今天决定怒更一记,纪念我死去的爱机. 如果你是网购达人,你的手机上一定少不了淘宝客户端.关注特效的人一定都会发现,淘宝不管是网站还是手机客户端,主页上都会有一个图片滚动播放器,上面展示一些它推荐的商品.这个几乎可以用淘宝来冠名的功能,看起来还是挺炫的,我们今天就来实现一下. 实现原理其实还是之前那篇文章Android仿人人客户端滑动菜单的侧滑菜单效果,史上最简单的侧滑实现  ,算是

  • vue iview多张图片大图预览、缩放翻转

    本文实例为大家分享了vue iview多张图片大图预览,可缩放翻转,供大家参考,具体内容如下 先看效果: 完整项目代码地址 具体代码如下: <style lang="less"> @import "../advanced-router.less"; </style> <template> <div class="balance-accounts"> <Row class-name="

随机推荐