<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        基于 Vue 的樹形選擇組件的示例代碼

        來源:懂視網 責編:小采 時間:2020-11-27 22:32:36
        文檔

        基于 Vue 的樹形選擇組件的示例代碼

        基于 Vue 的樹形選擇組件的示例代碼:本文介紹了基于 Vue 的樹形選擇組件。分享給大家,具體如下: 系統要求:Vue 2 基本特性 完美的多級聯動效果 支持無限多的分級 有 全選、半選、不選 三種狀態 截圖展示 代碼如下: <!DOCTYPE html> <html lang=e
        推薦度:
        導讀基于 Vue 的樹形選擇組件的示例代碼:本文介紹了基于 Vue 的樹形選擇組件。分享給大家,具體如下: 系統要求:Vue 2 基本特性 完美的多級聯動效果 支持無限多的分級 有 全選、半選、不選 三種狀態 截圖展示 代碼如下: <!DOCTYPE html> <html lang=e

        本文介紹了基于 Vue 的樹形選擇組件。分享給大家,具體如下:

        系統要求:Vue 2

        基本特性

      1.  完美的多級聯動效果
      2.  支持無限多的分級
      3.  有 全選、半選、不選 三種狀態
      4.  截圖展示

        代碼如下:

         <!DOCTYPE html>
        <html lang="en">
        <head>
         <meta charset="UTF-8">
         <link rel="icon"  rel="external nofollow" type="image/x-icon">
         <title>Vue Tree Select Example</title>
         <script src="https://cdn.bootcss.com/vue/2.4.2/vue.js"></script>
        </head>
        <body>
        
         <!-- 遞歸引用的模板 -->
         <template id="one-select" style="display: none;">
         <ul>
         <li v-for="(node, key, index) in tree">
         <div v-if="key != 'selected'">
         <div v-on:click="nodeClick(node, index)" v-bind:class="[node.selected == null ? 'tree-select-null' : (node.selected == 'half' ? 'tree-select-half' : 'tree-select-full'), 'tree-select', 'inline-block']"></div>
         
         <div class="inline-block">{{ key }}</div>
         <div v-if="key != ''">
         <one-select v-bind:tree="node" v-bind:isroot="false"></one-select>
         </div>
         </div>
         </li>
         </ul>
         </template>
        
         <!-- 整體樹容器 -->
         <div id="tree">
         <one-select v-bind:isroot="true" v-bind:tree="tree"></one-select>
         </div>
        
        <textarea id="treeDataJSON" style="display: none;">
        {
         "客戶管理": {
         "我的客戶": {
         "新分配": {},
         "跟進中": {},
         "簽單客戶": {},
         "長期客戶": {}
         },
         "長期客戶權限": {
         "設為長期客戶": {},
         "還原長期客戶": {}
         }
         },
         "采購列表": {
         "添加異常客情": {},
         "添加采購單": {},
         "采購退貨單列表": {},
         "供應商管理": {},
         "供應商聯系人": {},
         "品牌列表": {
         "寶潔": {},
         "樂視": {
         "樂視網": {},
         "樂視手機": {
         "樂視手機 1": {},
         "樂視手機 2": {},
         "樂視手機 3": {},
         "樂視手機 4": {},
         "樂視手機 5": {
         "體驗超深層級": {
         "繼續體驗超深層級": {
         "依然體驗超深層級": {},
         "依然體驗超深層級 2": {}
         }
         }
         }
         },
         "樂視電視": {}
         },
         "可口可樂": {},
         "圣象": {}
         }
         }
        }
        </textarea>
        
        <script>
        // 初始數據
        var treeDataJSON = document.getElementById("treeDataJSON").value;
        var treeData = JSON.parse(treeDataJSON);
        Vue.component('one-select', {
         name: 'one-select',
         template: '#one-select',
         props: ['tree', 'isroot'],
         created: function() {
         var realTree = Object.assign({}, this.tree);
         delete realTree.selected;
         if (Object.keys(realTree).length === 0) { // 判斷最低級,再刷新父級
         this.refreshAllParentNodes(this.$parent);
         }
         },
         methods: {
         nodeClick: function(node, index) {
         if (node.selected === 'full' || node.selected === 'half') {
         Vue.set(node, 'selected', null);
         } else {
         Vue.set(node, 'selected', 'full');
         }
         this.refreshAllParentNodes(self.$parent);
         this.refreshAllParentNodes(this);
         this.refreshAllSonNodes(this.$children[index], node.selected);
         },
         refreshAllSonNodes: function(node, status) {
         if (node instanceof Vue && node.$children.length) {
         for (index in node.$children) {
         Vue.set(node.$children[index].tree, 'selected', status);
         // 遞歸計算子級
         this.refreshAllSonNodes(node.$children[index], status);
         }
         }
         },
         refreshAllParentNodes: function(node) {
         if (node instanceof Vue) {
         var status = null;
         var nullCount = 0;
         var halfCount = 0;
         var fullCount = 0;
         for (index in node.$children) {
         if (typeof node.$children[index].tree.selected === 'undefined') {
         nullCount++;
         } else if (node.$children[index].tree.selected === null) {
         nullCount++;
         } else if (node.$children[index].tree.selected === 'half') {
         halfCount++;
         } else if (node.$children[index].tree.selected === 'full') {
         fullCount++;
         }
         }
         if (fullCount === node.$children.length) {
         status = 'full';
         } else if (nullCount === node.$children.length) {
         status = null;
         } else {
         status = 'half';
         }
         Vue.set(node.tree, 'selected', status);
        
         // 遞歸計算父級
         this.refreshAllParentNodes(node.$parent);
         }
         },
         log: function(o) {
         console.log(o);
         }
         }
        });
        vm = new Vue({
         el: '#tree',
         data: {
         tree: treeData
         },
         methods: {
         // 返回最終數據
         getResult: function() {
         return Object.assign({}, this.tree);
         }
         }
        });
        </script>
        
        <style>
        #tree {
         width: 500px;
         margin: 0 auto;
         margin-top: 50px;
        }
        li {
         list-style: none;
         line-height: 25px;
        }
        .inline-block {
         display: inline-block;
        }
        .tree-select {
         width: 13px;
         height: 13px;
         line-height: 16px;
         margin: 3px;
         display: inline-block;
         vertical-align: middle;
         border: 0 none;
         cursor: pointer;
         outline: none;
         background-color: transparent;
         background-repeat: no-repeat;
         background-attachment: scroll;
         background-image: url('selects.png');
        }
        .tree-select-null {
         background-position: 0 0;
        }
        .tree-select-full {
         background-position: -14px 0;
        }
        .tree-select-half {
         background-position: -14px -28px;
        }
        </style>
        
        </body>
        </html>
        
        

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        基于 Vue 的樹形選擇組件的示例代碼

        基于 Vue 的樹形選擇組件的示例代碼:本文介紹了基于 Vue 的樹形選擇組件。分享給大家,具體如下: 系統要求:Vue 2 基本特性 完美的多級聯動效果 支持無限多的分級 有 全選、半選、不選 三種狀態 截圖展示 代碼如下: <!DOCTYPE html> <html lang=e
        推薦度:
        標簽: VUE 組件 基于
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产精品成人免费福利| a毛片全部播放免费视频完整18| 老汉精品免费AV在线播放| 亚洲av午夜精品一区二区三区| 亚洲精品无码久久| 黑人粗长大战亚洲女2021国产精品成人免费视频| 亚洲v高清理论电影| 久久免费国产精品一区二区| 国产V亚洲V天堂无码| 国产99视频精品免费专区| 亚洲AV无码不卡在线播放| 久久99精品免费视频| 777亚洲精品乱码久久久久久| 亚洲精品免费在线| 2020年亚洲天天爽天天噜| 成人免费视频观看无遮挡| 久久精品国产亚洲av瑜伽| 亚洲精品第一国产综合境外资源| 美景之屋4在线未删减免费| 2022中文字字幕久亚洲| 国产在线观看xxxx免费| 亚洲AV第一页国产精品| 无人在线直播免费观看| 亚洲AV永久无码天堂影院| 亚洲AV伊人久久青青草原| 在线看片免费人成视频久网下载| 亚洲精品高清久久| 成人午夜视频免费| h视频免费高清在线观看| 亚洲色四在线视频观看| 免费观看黄网站在线播放| 国产成人亚洲精品播放器下载| 国产性爱在线观看亚洲黄色一级片 | 日本高清免费网站| 香蕉免费看一区二区三区| 亚洲日本精品一区二区 | 又爽又黄无遮挡高清免费视频| 两个人日本WWW免费版 | 免费一级毛片在级播放| 国产在线一区二区综合免费视频| 亚洲欧洲日韩极速播放|