學習vue有一段時間了,最近使用vue做了一套后臺管理系統,左側菜單需求是這樣的,可以多層,數據由后臺傳遞。也因為自己對官方文檔的不熟悉使得自己踩了不少坑,今天寫出來和大家一起分享。
效果圖如下所示:
先說說遇到的坑,由于是子父組件,當時傳遞使用的是子父組件的傳遞,但是這時候只能獲取到第一層的數據,第二層往后獲取不到數據,踩了一下午坑以后才知道,子組件使用了遞歸組件,這時候他已經不能往父組件傳遞了,子傳父,只能逐層傳遞這時候已經隔層了,所以我使用了非子父組件傳遞,兩個頁面都引入bus.js,這里不懂的請百度。
bus.js
import Vue from 'vue'
export default new Vue
父組件內容
模擬后臺數據
theModel:[{
'id': '1',
'menuName': '導航1',
'menuCode': '10',
'menuUrl':'',
'childMenus': [
{
'menuName': '用戶管理',
'menuCode': '11',
'menuUrl':'/home',
'menuPath':'',
'childMenus':[{
'menuName': '11111',
'menuCode': '12',
'menuUrl':'/systemjuri',
'menuPath':'',
'childMenus': []
}]
},
{
'menuName': '角色管理',
'menuCode': '12',
'menuUrl':'/systemjuri',
'menuPath':'',
'childMenus': []
},
{
'menuName': '菜單管理',
'menuUrl':'/systemmenu',
'menuCode': '13',
'menuPath':'http://10.63.195.214:8080/menuManage/html/index_3.html',
'childMenus':[]
}]
},{
'id': '1',
'menuName': '導航2',
'menuCode': '10',
'childMenus':[]
}],
父組件引入子組件
import myTree from './treeMenu.vue'
export default {
components: {
myTree
},
}
父組件接受子組件傳遞的數據
bus.$on("childEvent", function(transmit) {})
下面是子組件內容,子組件名稱treeMenu,name: 'treeMenu',
●
{{ model.menuName }}
import bus from "./../../../static/js/bus";
export default {
name: 'treeMenu',
props: ['model'],
data() {
return {
open: false,
}
},
computed: {
isFolder() {
return this.model.childMenus && this.model.childMenus.length
}
},
methods: {
toggle(msg,menuUrl,menuPath) {
if (this.isFolder) {
this.open = !this.open
}
var json = { msg: msg, menuUrl: menuUrl,menuPath:menuPath };
bus.$emit("childEvent", json)
},
}
}
ul {
list-style: none;
}
i.icon {
display: inline-block;
width: 15px;
height: 15px;
background-repeat: no-repeat;
vertical-align: middle;
float: right;
margin-top: 17px;
margin-right:30px;
}
.icon.folder {
background-image: url('./homeimg/left_1.png');
}
.icon.folder-open {
background-image: url('./homeimg/dowm_1.png');
}
.icon.file-text {
}
ul li ul li .icon.folder {
background-image: url('./homeimg/left_2.png');
}
ul li ul li .icon.folder-open {
background-image: url('./homeimg/down_2.png');
}
.tree-menu li {
line-height: 50px;
}
span{
display: block;
width: 100%;
height: 100%;
}
ul{
padding-left:10px;
}
ul li span{
text-indent: 10px;
}
ul li ul{
background:#ebf1f8;
color:#1457a7;
}
li:hover{
cursor:pointer;
}
由于用了遞歸組件所以name需要和對應起來
總結
以上所述是小編給大家介紹的vue左側菜單,樹形圖遞歸實現代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!