vue實現menu菜單懶加載


本文將在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 ...

 

最后效果圖:

 

 

 

 

完事兒收工,簡易的模擬懶加載效果實現啦!此寫法為最初版本,還可以根據業務需求進行更深層次的封裝達到復用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM