一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務(wù)器之家 - 編程語言 - JavaScript - vue.js - 基于ElementUI中Table嵌套實(shí)現(xiàn)多選的示例代碼

基于ElementUI中Table嵌套實(shí)現(xiàn)多選的示例代碼

2022-02-17 19:38齊x vue.js

這篇文章主要介紹了基于ElementUI中Table嵌套實(shí)現(xiàn)多選的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言:

寫這個是因?yàn)閹团笥研薷捻?xiàng)目中的bug
我也是第一次寫這個功能,有不對的希望大家指正,如果看完有幫助點(diǎn)個贊!
代碼中關(guān)鍵是js中Tree的路徑查找這個核心,有不懂的自行百度
多了不說了,有需要的可以私信找我要代碼,來看下我怎么實(shí)現(xiàn)的

思路:

從頭開始看這個需求,我們需要知道用到哪寫東西

1、表格Table
2、多選&全選
3、嵌套數(shù)據(jù)(下拉操作)

正好我們可以找下ElementUI官方文檔

基于ElementUI中Table嵌套實(shí)現(xiàn)多選的示例代碼

找到了我們需要用到的API

  • 在嵌套數(shù)據(jù)的時候需要使用tree-props
  • 選中數(shù)據(jù)的時候使用toggleRowSelection

基本就以上這些能用到的可以開搞了

實(shí)現(xiàn):

基于以上我們可以寫出HTML結(jié)構(gòu)

<template>
 <div>
  <el-table
   ref="multipleTable"
   :data="tableData"
   style="width: 100%; margin-bottom: 20px"
   row-key="id"
   border
   default-expand-all
   :select-on-indeterminate="true"
   :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
   @select="rowSelect"
   @select-all="selectAll"
  >
   <el-table-column type="selection" width="55"> </el-table-column>
   <el-table-column prop="date" label="日期" width="180"> </el-table-column>
   <el-table-column prop="name" label="姓名" width="180"> </el-table-column>
   <el-table-column prop="address" label="地址"></el-table-column>
  </el-table>
 </div>
</template>

表格的多選我可以分為2項(xiàng)目,1個是正向選中,意思就是checkout為true的時候,2是反向取消就是checkout為false的時候,那下面我就來分析下這個正向選中和反向取消如何實(shí)現(xiàn)

一、正向選中

假設(shè)我有這樣的數(shù)據(jù)
以下面圖1片為例:
    在點(diǎn)擊子節(jié)點(diǎn)的時候我們需要把子節(jié)點(diǎn)的父節(jié)點(diǎn)和跟節(jié)點(diǎn)同時進(jìn)行選中處理
    跟節(jié)點(diǎn)-父節(jié)點(diǎn)-子節(jié)點(diǎn)
    圖2是我data中聲明的數(shù)據(jù),數(shù)據(jù)中包含isChecked是否被選中和children是否有子節(jié)點(diǎn)

基于ElementUI中Table嵌套實(shí)現(xiàn)多選的示例代碼

基于ElementUI中Table嵌套實(shí)現(xiàn)多選的示例代碼

現(xiàn)在我們正向選中思路明確了那我們怎么來實(shí)現(xiàn)?

當(dāng)我點(diǎn)擊子節(jié)點(diǎn)時候需要記錄子節(jié)點(diǎn)的父節(jié)點(diǎn)一直到跟節(jié)點(diǎn),那我們就用到了Tree樹的概念

下面代碼用到了樹的回溯的思想,查找路徑使用先序遍歷,因?yàn)槟悴淮_定你點(diǎn)擊的是子節(jié)點(diǎn)是在哪個子樹上,
具體的Tree方法思想請百度一下;

treeFindPath(tree, func, path = []) {
   if (!tree) return [];
   for (const data of tree) {
    path.push(data);
    if (func(data)) return path;
    if (data.children) {
     const findChildren = this.treeFindPath(data.children, func, path);
     if (findChildren.length) return findChildren;
    }
    path.pop();
   }
   return [];
  },

通過上面這段代碼我們調(diào)用的時候傳節(jié)點(diǎn)的id會返回一個數(shù)組,數(shù)組包含它所在路徑上的對象,這樣我們就可以通過循環(huán)遍歷這個數(shù)組通過toggleRowSelection反法來實(shí)現(xiàn)頁面狀態(tài)樣式的改變。

二、反向取消

反向取消正好和選中相反
在點(diǎn)擊子節(jié)點(diǎn)取消的時候我們需要判斷同級的節(jié)點(diǎn)是不是都取消了,如果都取消了需要把這個節(jié)點(diǎn)的父節(jié)點(diǎn)改為取消狀態(tài),之后再查其父節(jié)點(diǎn)同級是否都是取消狀態(tài),如果還有取消狀態(tài),同理跟剛才方式一樣接著向其上級節(jié)點(diǎn)查找直到不滿足條件為止,跳出循環(huán)。

簡單的來個示意圖

基于ElementUI中Table嵌套實(shí)現(xiàn)多選的示例代碼

在點(diǎn)擊4節(jié)點(diǎn)時,會查看同級節(jié)點(diǎn)5和6是否是取消狀態(tài),如果都是取消狀態(tài),查他們的上一級2,把2改為false,在查2的同級3是否是取消如果是取消在查1
如果同級有選中狀態(tài)會直接跳出循環(huán)不進(jìn)行下一步操作

下面是取消選中代碼

還是用Tree的代碼,把獲取的數(shù)組reverse()進(jìn)行了翻轉(zhuǎn)
第一次循環(huán)從點(diǎn)擊那個節(jié)點(diǎn)網(wǎng)上查找
這里使用for循環(huán)如果不滿足直接終止后面循環(huán)

基于ElementUI中Table嵌套實(shí)現(xiàn)多選的示例代碼

三、全選

這里我感覺寫的比較啰嗦,
全選時候我會先通過數(shù)據(jù)中isChecked來遞歸判斷是否有沒有選中的
如果有沒有選中會遞歸執(zhí)行把所有數(shù)據(jù)中的isChecked變?yōu)閠rue,如果都選中了,會遞歸修改為false,

下面是全選的所有代碼

  /**
   * @describe 全選
   */
  selectAll(selection) {
   console.log(selection);
   let isAllCheck = this.selectAllRecursion(this.tableData);
   // 是否有aa為false代表是有沒選中
   this.checkoutAll(this.tableData, !isAllCheck);
  },
  /**
   * @describe 遞歸判斷isChecked是否都是true,false代表是有沒選中
   */
  selectAllRecursion(arr) {
   let isCheck = true;
   function isRecursion(arr) {
    arr.forEach((item) => {
     if (!item.isChecked) {
      isCheck = false;
      if (item.children) {
       isRecursion(item.children);
      }
     }
    });
   }
   isRecursion(arr);
   return isCheck;
  },
  /**
   * @describe 把所有的夠改為true或者false
   */
  checkoutAll(arr, boole) {
   var _this = this;
   function allCheck(arr, boole) {
    arr.forEach((item) => {
     item.isChecked = boole;
     _this.$refs.multipleTable.toggleRowSelection(item, boole);
     if (item.children) {
      allCheck(item.children, boole);
     }
    });
   }
   allCheck(arr, boole);
  },

END:

基本代碼就以上這些,不包含表格分頁功能

到此這篇關(guān)于基于ElementUI中Table嵌套實(shí)現(xiàn)多選的示例代碼的文章就介紹到這了,更多相關(guān)ElementUI Table嵌套多選內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://juejin.cn/post/6938640363150114823

延伸 · 閱讀

精彩推薦
  • vue.jsVue2.x-使用防抖以及節(jié)流的示例

    Vue2.x-使用防抖以及節(jié)流的示例

    這篇文章主要介紹了Vue2.x-使用防抖以及節(jié)流的示例,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下...

    Kyara6372022-01-25
  • vue.jsVue多選列表組件深入詳解

    Vue多選列表組件深入詳解

    這篇文章主要介紹了Vue多選列表組件深入詳解,這個是vue的基本組件,有需要的同學(xué)可以研究下...

    yukiwu6752022-01-25
  • vue.js詳解vue 表單綁定與組件

    詳解vue 表單綁定與組件

    這篇文章主要介紹了vue 表單綁定與組件的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下...

    Latteitcjz6432022-02-12
  • vue.jsVue中引入svg圖標(biāo)的兩種方式

    Vue中引入svg圖標(biāo)的兩種方式

    這篇文章主要給大家介紹了關(guān)于Vue中引入svg圖標(biāo)的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的...

    十里不故夢10222021-12-31
  • vue.js梳理一下vue中的生命周期

    梳理一下vue中的生命周期

    看過很多人講vue的生命周期,但總是被繞的云里霧里,尤其是自學(xué)的同學(xué),可能js的基礎(chǔ)也不是太牢固,聽起來更是吃力,那我就已個人之淺見,以大白話...

    CRMEB技術(shù)團(tuán)隊(duì)7992021-12-22
  • vue.jsVue項(xiàng)目中實(shí)現(xiàn)帶參跳轉(zhuǎn)功能

    Vue項(xiàng)目中實(shí)現(xiàn)帶參跳轉(zhuǎn)功能

    最近做了一個手機(jī)端系統(tǒng),其中遇到了父頁面需要攜帶參數(shù)跳轉(zhuǎn)至子頁面的問題,現(xiàn)已解決,下面分享一下實(shí)現(xiàn)過程,感興趣的朋友一起看看吧...

    YiluRen丶4302022-03-03
  • vue.js用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法

    用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法

    這篇文章主要介紹了用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下...

    Asiter7912022-01-22
  • vue.jsVue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn)

    Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn)

    這篇文章主要介紹了Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋...

    優(yōu)小U9632022-02-21
主站蜘蛛池模板: 91香蕉视频导航 | 国产精品视频一区二区三区不卡 | 婷综合| 日韩高清一区 | 欧美涩区 | 日本黄a | 亚洲国产影院 | 九九九九九九 | 娇喘嗯嗯 轻点啊视频福利 九九九九在线精品免费视频 | 三级全黄裸体 | 色婷婷久久综合中文久久一本 | 玩两个少妇女邻居 | 玩两个少妇女邻居 | 午夜免费小视频 | 超碰成人在线播放 | 国产精品一级片 | 久久99热在线观看7 久久99精品涩AV毛片观看 | 精品亚洲视频在线观看 | 91香蕉影院 | 国产日韩欧美在线观看不卡 | 青草影院在线观看 | 交换朋友夫妇3中文字幕 | 性色xxx | 9久re热视频这里只有精品 | 亚洲性69影视 | www.亚洲5555.com | 欧美三级小视频 | 双性受合不垅腿攻np | 99精品国产成人a∨免费看 | 99rv精品视频在线播放 | 成人影院观看 | 国产亚洲精aa在线观看香蕉 | 521色香蕉网在线观看免费 | 大片毛片女女女女女女女 | 亚洲精品91大神在线观看 | 8天堂资源在线官网 | 亚洲精品乱码蜜桃久久久 | 日本黄大片影院一区二区 | 亚洲福利电影一区二区? | 王淑兰与铁柱全文免费阅读 | 窝窝影院午夜色在线视频 |