開門見山,步入正題。
1.首先要明確以下幾點 (這無序列表難受==)
- 菜單list由后端生成
- 菜單list必須和
routers.js保持一致 - routers.js 里面該怎么寫,就怎么寫,不需要刪除
- 需要有一丟對 vuex的基本操作,對于iview-admin有了一定了解,那么巧了,我沒有了解,那么就做不了了嗎?NO,一樣可以。
- 先搞一下
store/module/app.js,寫一個獲取菜單信息的actions:getMenuData,
- 先搞一下
getMenuData ({ commit, rootState }, params) {
mainList(params).then(res => {
commit('setMenuRspList', res.data.data)
}).catch(e => {
console.log(e)
})
}
解釋下:
1). mainList 是你獲取list的一個方法,即
axios.request({
url:'',
data(params):{},
method:''
}).then(res=>{
}).catch(e=>{
})
2). setMenuRspList 是你定義好的方法,在state定義下:menuRspList:[ ],找不到在哪里?那么你可以把這個文件從頭看一遍了,對,看一遍!
ok! 此時你的菜單已經獲取完了,開始渲染?。?!
- 現在該操作一下
mutations了,在里面操作下你的setMenuRspList,
setMenuRspList (state, list) {
let len = list.length
for (let i = 0; i < len; i++) {
state.menuRspList.push(list[i])
}
state.hasInfo = true
}
list就是你的菜單list,穿過來一定是個數組,因為是list
- 現在開始表演了
修改gettters,什么 你又找不到了? 好吧,再把app.js從頭到尾看一遍,(ctrl+f更簡單!一般人不告訴他)
menuList: (state, getters, rootState) => getMenuByRouter(state.menuRspList ),
改好了嗎?
5.還有最后一步,就是在入口處調用下你的菜單路由:router/index.js中,隨便在router.beforeEach中添加下
store.dispatch('getMenuData').then(res => {})
就好了
6.調用下吧,運行你的項目npm run dev是不是看到效果了呢?
7.注意vuex的運用有時候配置不對,菜單出現了,但是刷新就消失了為什么呢?
原因就是讓你看vuex了,老實交代是不是沒看,就知道不看,后悔不,沒關系,我可以告訴你這個秘密哦。vuex中store并不是永久存儲的,什么?解決辦法?
修改下getter方法,或者在router\index.js里面做下文章,每次刷新都去請求下,就ok了,思路有了,接下來看你的表演了。
照著我的教程,我寫了個小demo,附地址:github地址:https://github.com/Timedrugs/iview-admin-menu
第一版的時候我沒有寫第5步,很多人就出現了問題,其實你想想vue的生命周期,就知道怎么回事了
OK!