本文将在vue+element ui项目中简单实现menu菜单的懒加载。

最近接到这样的需求:菜单的选项不要固定的,而是下一级菜单选项需要根据上级菜单调接口来获取。what? 这不就是懒加载吗?翻了一遍element ui文档,并没有找到menu菜单的懒加载,于是乎就自己手写一个啦。

首先最外层,子菜单打开的触发方式为click,用于之后点击调接口:

1 <el-menu class="el-menu-demo" mode="horizontal" @select="handleSelect" menu-trigger="click" unique-opened>...</el-menu>

内部具体实现:

html:

 1 ...
2
3 <el-submenu v-if="business == 3" index="1-1-2" class="bgkh" @click.native="clickSub('1-1-2')">
4 <template slot="title">致函客户—中文</template>
5 <el-menu-item index="loading" v-if="loading">加载中...</el-menu-item>
6 <el-menu-item index="noData" v-if="noData">无数据</el-menu-item>
7 <el-submenu :index="`1-1-2-1-${index}`" v-for="(item,index) in jieduanList" :key="index" @click.native="queryMailTypeAll(1,item.jieduan)">
8 <template slot="title">{{item.jieduan}}</template>
9 <el-menu-item index="nextLoading" v-if="nextLoading">加载中...</el-menu-item>
10 <el-menu-item index="nextNoData" v-if="nextNoData">无数据</el-menu-item>
11 <el-menu-item :index="`1-1-2-1-${index}-${ind}`" v-for="(it,ind) in mailTypeAllList">{{it.mailTypeDesc}}</el-menu-item>
12 </el-submenu>
13 </el-submenu>
14
15 ...

js:

 1 ...
2
3 queryMailTypeAll(businessType,jieduan){
4 this.nextLoading = true
5 this.nextNoData = false
6 this.mailTypeAllList = []
7 queryMailTypeAll({
8 businessType,
9 jieduan,
10 caseIds:this.multipleSelection.map(item=>item.caseId)
11 }).then(res=>{
12 this.nextLoading = false
13 this.mailTypeAllList = res.data.filter(item=>!!item)
14 this.mailTypeAllList&&!this.mailTypeAllList.length&&(this.nextNoData = true)
15 }).catch(err=>{
16 this.mailTypeAllList = []
17 this.nextLoading = false
18 this.nextNoData = true
19 })
20 },
21 queryJieduan(businessType){
22 this.loading = true
23 this.noData = false
24 this.jieduanList = []
25 queryJieduan({
26 caseIds:this.multipleSelection.map(item=>item.caseId),
27 businessType
28 }).then(res=>{
29 this.loading = false
30 this.jieduanList = res.data.filter(item=>!!item)
31 this.jieduanList&&!this.jieduanList.length&&(this.noData = true)
32 }).catch(err=>{
33 this.jieduanList = []
34 this.loading = false
35 this.noData = true
36 })
37 },
38 clickSub(key){
39 this.business == 3 && key == '1-1-2' && (this.queryJieduan(1))
40 this.business == 3 && key == '1-1-3' && (this.queryJieduan(2))
41 }
42
43 ...

最后效果图:

完事儿收工,简易的模拟懒加载效果实现啦!此写法为最初版本,还可以根据业务需求进行更深层次的封装达到复用。

vue实现menu菜单懒加载的更多相关文章

  1. vue + vue-lazyload 实现图片懒加载

    1.安装 npm i vue-lazyload -S 2.配置 main.js /***图片模板等懒加载 start ***/ import VueLazyload from 'vue-lazyloa ...

  2. Vue实现一个图片懒加载插件(转载)

    Vue是可以自定义指令的,最近学习过程中遇见了一个需要图片懒加载的功能,最后参考了别人的代码和思路自己重新写了一遍.以下将详细介绍如何实现自定义指令v-lazyload. 先看如何使用这个指令: &l ...

  3. vue.js 二 路由懒加载

    当项目小的时候,我没考虑要去找这个得解决方案,也幸好现在几乎能迁移的项目都整合在了一个vue的项目里面 才发现编译后的vendor.js变得异常的大,而且几乎在项目每一个页面都需要加载这一个js,项目 ...

  4. 在webpack中使用Code Splitting--代码分割来实现vue中的懒加载

    当Vue应用程序越来越大,使用Webpack的代码分割来懒加载组件,路由或者Vuex模块, 只有在需要时候才加载代码. 我们可以在Vue应用程序中在三个不同层级应用懒加载和代码分割: 组件,也称为异步 ...

  5. VUE图片懒加载-vue lazyload插件的简单使用

    序:vue项目时候,我们要对图片进行懒加载处理,这个开发项目中就不需要自己去写了,因为比较方便使用vue lazyload进行处理,高效率开发 一. vue lazyload插件: 插件地址:http ...

  6. Vue Router的懒加载路径

    单页应用产出的入口chunk大小随着业务的复杂度线性增加,导致后期加载速度越来越慢.后面就需要对不同路径下的模块进行拆分,打包到相应的chunk下,按需加载,找到chunk的大小.个数和页面加载速度的 ...

  7. Vue图片懒加载

    图片懒加载的原理 先将img标签中的src链接设为同一张图片(空白图片),将其真正的图片地址存储再img标签的自定义属性中(比如data-src).当js监听到该图片元素进入可视窗口时,即将自定义属性 ...

  8. Vue图片懒加载之lazyload插件使用

    当内容没有加载完的时候,用户体验不是很好,这时候,可以使用lazyload这个插件,提升用户体验,使用方法特别简单易用 一. vue lazyload插件: 插件地址:https://github.c ...

  9. vue中的懒加载和按需加载

    懒加载 (1)定义:懒加载也叫延迟加载,即在需要的时候进行加载,随用随载. (2)异步加载的三种表示方法: 1. resolve => require([URL], resolve),支持性好 ...

随机推荐

  1. AI算子列表

    AI算子列表 概述 目前只有部分算子可在一个库中同时运行在MLU220和MLU270平台.也就是用户使用 ./build_cnplugin.sh --mlu270 命令编译生成的 libcnplugi ...

  2. TVM自定义数据类型

    TVM自定义数据类型 本文将介绍"自定义数据类型"框架,该框架可在TVM中使用自定义数据类型. 介绍 在设计加速器时,关键是如何近似地表示硬件中的实数.这个问题具有长期的行业标准解 ...

  3. OSPF-三张表+路由器角色+router-id

    验证理论: 1.剖析OSPF的三张表:邻居表,拓扑表,路由表 dis ospf peer brief dis ospf lsdb dis ip routing-table protocol ospf ...

  4. fiddler操作详情

    1.设置fiddler请求过滤 2.请求与响应的格式内容  3.拦截请求操作 a.按F11开始拦截,发送请求 b.修改请求数据 c.SHIFT+F11关闭拦截 d.run to complete,把修 ...

  5. 基于Android平台的图书管理系统的制作(3)

    前两篇介绍了主页面和Student,这一篇来讲Book类和工作人员. Book是图书管理系统的核心,查书,借书,还书,增加书都与Book类息息相关.Book类的设计很简单:包含信息:名称.作者.页数. ...

  6. 【题解】hdu 3586 Information Disturbing 二分 树形dp

    题目描述 Information DisturbingTime Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java ...

  7. Project Reactor 响应式编程

    目录 一. 什么是响应式编程? 二. Project Reactor介绍 三. Reactor核心概念 Flux 1. just() 2. fromArray(),fromIterable()和 fr ...

  8. vue调用子组件方法时,参数传不过去

    有可能是因为子组件方法用了 async  await 子组件去掉async就好了

  9. Terraform插件Provider管理,搜索、定义、下载

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: Ter ...

  10. 一、JavaSE语言基础之关键字与标示符

    1.关键字   所谓关键字指Java中被赋予了特殊含义的单词或字符,Java中常见的关键字共53个,不需要进行记忆,在写代码的过程中会逐渐接触. 2.标示符   标示符,简单来说就是名字:其最大的作用 ...