您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

vue做出树形菜单步骤详解

2026/1/15 9:20:03发布11次查看
这次给大家带来vue做出树形菜单步骤详解,vue做出树形菜单的注意事项有哪些,下面就是实战案例,一起来看一下。
<!doctype html> <html>  <head>  <meta charset="utf-8">  <title>vue</title>  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <link rel="stylesheet" href="animate.css">  <script src="vue.js"></script>  <style>   *{   color:#585858;      }   #app{   min-height: 650px;   }   #app li{   list-style-type:none;   }   #app a{   text-decoration:none;   }   #app button{   width:100%;   }   #app ul{   padding:10px;   }   #app span{   cursor:pointer;   }   #tree{   border: 1px solid #ccc;     min-height: 650px;   width: 50%;   margin:0;   padding-top: 10px;   background-color:#f2f2f2;   position: absolute;   top:0;   left:0;   }      #tree li {   display: block;   padding: 0;   margin: 0;   border: 0;   border-bottom: 1px solid #e5e5e5;   min-height: 32px;   line-height:32px;   }  </style>  </head>  <body>  <p id='app' @click='hidetree($event)'>   <button @click.stop="show = !show">点我</button>      <transition enter-active-class="animated fadeinleft" leave-active-class="animated fadeoutleft">   <item v-bind:tree='treedata' id='tree' v-if="show"></item>    </transition>   </p>  <template id='tree-template'>   <ul>   <li v-for='(v,i) in tree'>     <span v-if="isfolder(v)" @click="toggle(i)">{{ tree[i].open ? '-' : '+' }}</span>    <a data-id="v.id">{{v.city}}</a>     <item v-bind:tree='v.child' v-show="tree[i].open"></item>   </li>   </ul>   </template>  <script>   var data = [{id:26,pid:1,city:四川省},{id:30,pid:1,city:云南省},{id:322,pid:26,city:成都},{id:323,pid:26,city:绵阳},{id:324,pid:26,city:阿坝},{id:325,pid:26,city:巴中},{id:326,pid:26,city:达州},{id:327,pid:26,city:德阳},{id:328,pid:26,city:甘孜},{id:329,pid:26,city:广安},{id:330,pid:26,city:广元},{id:331,pid:26,city:乐山},{id:332,pid:26,city:凉山},{id:333,pid:26,city:眉山},{id:334,pid:26,city:南充},{id:335,pid:26,city:内江},{id:336,pid:26,city:攀枝花},{id:337,pid:26,city:遂宁},{id:338,pid:26,city:雅安},{id:339,pid:26,city:宜宾},{id:340,pid:26,city:资阳},{id:341,pid:26,city:自贡},{id:342,pid:26,city:泸州},{id:367,pid:30,city:昆明},{id:378,pid:30,city:曲靖},{id:3100,pid:367,city:盘龙区},{id:3101,pid:367,city:五华区},{id:3102,pid:367,city:官渡区},{id:3103,pid:367,city:西山区},{id:3104,pid:367,city:东川区},{id:3105,pid:367,city:安宁市},{id:3106,pid:367,city:呈贡县},{id:3107,pid:367,city:晋宁县},{id:3108,pid:367,city:富民县},{id:3109,pid:367,city:宜良县},{id:3110,pid:367,city:嵩明县},{id:3111,pid:367,city:石林县},{id:3112,pid:367,city:禄劝},{id:3113,pid:367,city:寻甸},{id:3189,pid:378,city:麒麟区},{id:3190,pid:378,city:宣威市},{id:3191,pid:378,city:马龙县},{id:3192,pid:378,city:陆良县},{id:3193,pid:378,city:师宗县},{id:3194,pid:378,city:罗平县},{id:3195,pid:378,city:富源县},{id:3196,pid:378,city:会泽县},{id:3197,pid:378,city:沾益县}];   var treedata = createtree({   idname:'id',   pidname:'pid',   rootid:1,   data:data   });   function createtree(arg){   var idname = arg.idname,    pidname = arg.pidname,    rootid = arg.rootid,    data = arg.data,    treedata = [];   var _createtree = function(id){    var ret = [];     var index = 0;    for(var i = 0; i < data.length; i++){ if(data[i][pidname] == id){ ret[index] = data[i]; ret[index].child = _createtree(data[i][idname]); index++; } } return ret; } var index = 0; for(var i = 0; i < data.length; i++){ if(data[i][pidname] == rootid){ treedata[index] = data[i]; treedata[index].child = _createtree(data[i][idname]); index++; } } return treedata; } vue.component('item', { template: '#tree-template', props: ['tree'], data: function () { return {} }, methods: { toggle: function (i) { this.tree[i].open = !this.tree[i].open; this.$set(this.tree, i, this.tree[i]); }, isfolder: function (data) { return data.child && data.child.length }, }, }) var vm = new vue({ el: '#app', data: { treedata: treedata, show:false, }, methods: { hidetree:function(e){ if(e.target.id == 'app'){ console.log(137); this.show = false; } } }, created: function () { function _addopen(data) { for (var i = 0; i < data.length; i++) { data[i]['open'] = false; if (data[i].child.length > 0) {     _addopen(data[i].child);     }    }    }    _addopen(this.treedata);   }   });  </script>  </body> </html>
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
react-native封装插件swiper使用步骤详解
fifo/lru实现缓存算法
以上就是vue做出树形菜单步骤详解的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product