欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于el-tree實現(xiàn)懶加載穿梭條的示例代碼

 更新時間:2024年03月07日 10:07:49   作者:gyuhao_o  
這篇文章主要介紹了基于el-tree實現(xiàn)懶加載穿梭條的示例代碼,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

一、關(guān)鍵代碼 

<template>
  <div>
    <!-- 左側(cè)待選列表 -->
    <div class="left-box">
      <p>待選列表</p>
      <el-input placeholder="輸入關(guān)鍵詞過濾" v-model="leftFilterText" clearable/>
      <el-tree
        ref="treeLeft"
        :data="leftData"
        show-checkbox
        node-key="id"
        props="defaultProps"
        :load="loadNode"
        lazy
        :filter-node-method="filterNode"  
      >
      </el-tree>
    </div>
    <!-- 穿梭按鈕 -->
    <div class="oper-box">
      <el-button circle type="primary" icon="el-icon-arrow-left" @click="removeData"></el-button>
      <el-button circle type="primary" icon="el-icon-arrow-right" @click="addData"></el-button>
    </div>
    <div class="right-box">
      <p>已選列表</p>
      <el-input placeholder="輸入關(guān)鍵詞過濾" v-model="rightFilterText" clearable/>
      <el-tree
        ref="treeRight"
        :data="rightData"
        show-checkbox
        node-key="id"
        props="defaultProps"
        :filter-node-method="filterNode"  
      >
      </el-tree>
    </div>
  </div>
</template>
<script>
  data(){
    return {
      checkAll: false,
      leftFilterText: '',
      rightFilterText: '',
      defaultProps: {
        chilren: 'children',
        label: 'labelName',   // 適配后端下發(fā)的數(shù)據(jù)字段名
        isLeaf: 'leaf',   // leaf 字段判斷節(jié)點是否為葉子節(jié)點
        // 配置禁選的節(jié)點
        disabled: function(data, node) {
          // 如這里配置父節(jié)點、帶有disable屬性的節(jié)點禁選
          if('children' in data || data.disable) {
            return true;
          } else {
            return false;
          }
        }
      },
      leftData: [],
      rightData: []
    }
  },
  watch: {
    leftFilterText(val) {
      this.$refs.treeLeft.filter(val);
    },
    rightFilterText(val) {
      this.$refs.treeRight.filter(val);
    }
  },
  methods: {
    // 根據(jù)關(guān)鍵詞過濾節(jié)點
    filterNode(value, data) {
      if(!value) return true;
      // labeName 為defaultProps中配置的label值,未配置默認(rèn)為label
      return data.labeName.indexOf(value) !== -1;
    },
    // 懶加載出樹結(jié)構(gòu)的最后一層節(jié)點
    async loadNode(node, resolve) {
      if(node.level === 0) {
        return resolve(node.data);   // 頂層數(shù)據(jù)默認(rèn)展示
      } else {
        if(node.data.children && node.data.children.length > 0) {
          return resolve(node.data.children);
        } else {  // 最后一層數(shù)據(jù),異步懶加載
          let tempData = await this.getDynamicData(node.data.id);
          return resolve(tempData);
        }
      }
    },
    // 獲取數(shù)據(jù)接口
    getDynamicData(id) {
    },
    // 移除節(jié)點
    removeData() {
      // 右側(cè)選中節(jié)點
      let removeKeys = this.$refs.treeRight.getCheckedKeys();
      this.rightData = this.rightData.filter(item => !removeKeys.includes(item.id));
      // 左側(cè):僅保留右側(cè)列表中有的數(shù)據(jù)為勾選狀態(tài)
      let leftCheckKeys = this.rightData.map(item => item.id);
      this.$refs.treeLeft.setCheckedKeys(leftCheckKeys);
    },
    // 添加節(jié)點
    removeData() {
      // 獲取左側(cè)選中節(jié)點,作為右側(cè)的數(shù)據(jù)
      let checkNodes = this.$refs.treeLeft.getCheckedNodes();
      let checkKeys = this.$refs.treeLeft.getCheckedKeys();
      this.rightData = checkNodes;
    },
  }
</script>
 

?? 過濾節(jié)點函數(shù):filterNode

1、watch 監(jiān)聽關(guān)鍵詞;filterNode 必須有返回值,否則數(shù)據(jù)顯示不出來;

2、關(guān)鍵詞不為空時,函數(shù)的返回值 data.labeName.indexOf(value) !== -1; 其中 labeName 為defaultProps中配置的label值,未配置默認(rèn)為label

?? 異步加載函數(shù):loadNode

根據(jù) node.level 去匹配數(shù)據(jù)層級,判斷是否需要調(diào)用接口獲取數(shù)據(jù)

?? 樣式自定義

二、最終效果:(效果圖僅供參考)

(1) 左側(cè)列表為樹形結(jié)構(gòu),且最后一級節(jié)點懶加載;(數(shù)據(jù)量大時,可以有效提高加載速度)

(2)右側(cè)選中的列表無樹形結(jié)構(gòu),為左側(cè)選中的所有節(jié)點

到此這篇關(guān)于基于el-tree實現(xiàn)懶加載穿梭條的文章就介紹到這了,更多相關(guān)el-tree懶加載穿梭條內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解nginx配置vue h5 history去除#號

    詳解nginx配置vue h5 history去除#號

    這篇文章主要介紹了詳解nginx配置vue h5 history去除#號,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 詳解關(guān)于vue-area-linkage走過的坑

    詳解關(guān)于vue-area-linkage走過的坑

    這篇文章主要介紹了詳解關(guān)于vue-area-linkage走過的坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • 詳解Vue2+Echarts實現(xiàn)多種圖表數(shù)據(jù)可視化Dashboard(附源碼)

    詳解Vue2+Echarts實現(xiàn)多種圖表數(shù)據(jù)可視化Dashboard(附源碼)

    本篇文章主要介紹了詳解Vue2+Echarts實現(xiàn)多種圖表數(shù)據(jù)可視化Dashboard(附源碼),具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Vue源碼makeMap函數(shù)深入分析

    Vue源碼makeMap函數(shù)深入分析

    vue源碼中的makeMap用在很多地方,主要是判斷標(biāo)簽是原生標(biāo)簽還是用戶自定義的組件,但是標(biāo)簽很多,如果每判斷一次都執(zhí)行一次循環(huán),累計下來,性能損耗還是很大的,makeMap就是解決這個問題出現(xiàn)的
    2022-08-08
  • 使用Vue與WebSocket創(chuàng)建實時通知系統(tǒng)

    使用Vue與WebSocket創(chuàng)建實時通知系統(tǒng)

    在現(xiàn)代應(yīng)用開發(fā)中,實時性已成為用戶體驗的一個重要組成部分,ue 作為一款流行的前端框架,配合 WebSocket,可以輕松構(gòu)建實時通知系統(tǒng),在本文中,我們將通過一個簡單的示例,使用 Vue 3 的 Composition API(setup 語法糖)來創(chuàng)建一個實時通知系統(tǒng)
    2024-11-11
  • vue單頁應(yīng)用在頁面刷新時保留狀態(tài)數(shù)據(jù)的方法

    vue單頁應(yīng)用在頁面刷新時保留狀態(tài)數(shù)據(jù)的方法

    今天小編就為大家分享一篇vue單頁應(yīng)用在頁面刷新時保留狀態(tài)數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 說說Vuex的getters屬性的具體用法

    說說Vuex的getters屬性的具體用法

    這篇文章主要介紹了說說Vuex的getters屬性的具體用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • vue 之 .sync 修飾符示例詳解

    vue 之 .sync 修飾符示例詳解

    這篇文章主要介紹了vue 之 .sync 修飾符的相關(guān)知識,非常不錯,具有參考借鑒價值 ,需要的朋友可以參考下
    2018-04-04
  • Vue項目打包成exe可執(zhí)行文件的實現(xiàn)過程(無瑕疵,完美版)

    Vue項目打包成exe可執(zhí)行文件的實現(xiàn)過程(無瑕疵,完美版)

    突然接到公司需求,說客戶想讓我們把項目直接打包,所以下面這篇文章主要給大家介紹了關(guān)于Vue項目打包成exe可執(zhí)行文件的實現(xiàn)過程,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Vue?事件處理函數(shù)的綁定示例詳解

    Vue?事件處理函數(shù)的綁定示例詳解

    這篇文章主要為大家介紹了Vue?事件處理函數(shù)的綁定示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02

最新評論