- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) > JavaScript >
- vue+iview的菜單與頁(yè)簽的聯(lián)動(dòng)方式
最近在使用vue+iview開(kāi)發(fā)一個(gè)后臺管理類(lèi)的系統,希望做一個(gè)點(diǎn)擊左側菜單右側的頁(yè)簽與內容都能相對應的改變。
但搞了好久的路由也沒(méi)有實(shí)現這個(gè)功能。
剛開(kāi)始使用vue+iview不知道iview-admin可以直接拿來(lái)使用,布局之類(lèi)的開(kāi)箱即用,可是自己的demo已經(jīng)寫(xiě)了好久不忍心放棄。
由于menu與tab的數據相同且樣式需要進(jìn)行關(guān)聯(lián),因此可以使用vuex進(jìn)行狀態(tài)管理,state中寫(xiě)入需要管理的數據和狀態(tài)變量,在mutations中設置操作的動(dòng)作,actions中監聽(tīng)一些行為(我的菜單沒(méi)有展開(kāi)收縮部分,因此并沒(méi)有使用到actions)
on-select,首先在mutations中注冊tab的改變事件,當左側菜單點(diǎn)擊的時(shí)候查看tab中是否已經(jīng)有這個(gè)頁(yè)簽并設置isExist=false,如果存在,isExist修改為true,沒(méi)有的話(huà)給tab對應遍歷的數組增加菜單相對索引的數據。
mutationsType中
mutations中:
menu組件中的事件為:
在tab組件中首先設置頁(yè)面默認路由:
再將事件加入進(jìn)去:
用最笨的方式寫(xiě)了一個(gè)三級菜單的聯(lián)動(dòng)
<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>
以上為個(gè)人經(jīng)驗,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站