最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言:

寫這個是因為幫朋友修改項目中的bug
我也是第一次寫這個功能,有不對的希望大家指正,如果看完有幫助點個贊!
代碼中關(guān)鍵是js中Tree的路徑查找這個核心,有不懂的自行百度
多了不說了,有需要的可以私信找我要代碼,來看下我怎么實現(xiàn)的

思路:

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

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

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

找到了我們需要用到的API

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

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

實現(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項目,1個是正向選中,意思就是checkout為true的時候,2是反向取消就是checkout為false的時候,那下面我就來分析下這個正向選中和反向取消如何實現(xiàn)

一、正向選中

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

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

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

下面代碼用到了樹的回溯的思想,查找路徑使用先序遍歷,因為你不確定你點擊的是子節(jié)點是在哪個子樹上,
具體的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é)點的id會返回一個數(shù)組,數(shù)組包含它所在路徑上的對象,這樣我們就可以通過循環(huán)遍歷這個數(shù)組通過toggleRowSelection反法來實現(xiàn)頁面狀態(tài)樣式的改變。

二、反向取消

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

簡單的來個示意圖

在點擊4節(jié)點時,會查看同級節(jié)點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)從點擊那個節(jié)點網(wǎng)上查找
這里使用for循環(huán)如果不滿足直接終止后面循環(huá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嵌套實現(xiàn)多選的示例代碼的文章就介紹到這了,更多相關(guān)ElementUI Table嵌套多選內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue CLI2升級至Vue CLI3的方法步驟

    Vue CLI2升級至Vue CLI3的方法步驟

    這篇文章主要介紹了Vue CLI2升級至Vue CLI3的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vue項目如何全局修改el-button樣式

    vue項目如何全局修改el-button樣式

    這篇文章主要介紹了vue項目如何全局修改el-button樣式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 使用Elemen加上lang=“ts“后編譯報錯

    使用Elemen加上lang=“ts“后編譯報錯

    本文主要介紹了使用Elemen加上lang=“ts“后編譯報錯,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Vue3+Vue Router實現(xiàn)動態(tài)路由導(dǎo)航的示例代碼

    Vue3+Vue Router實現(xiàn)動態(tài)路由導(dǎo)航的示例代碼

    隨著單頁面應(yīng)用程序(SPA)的日益流行,前端開發(fā)逐漸向復(fù)雜且交互性強(qiáng)的方向發(fā)展,在這個過程中,Vue.js及其生態(tài)圈的工具(如Vue Router)為我們提供了強(qiáng)大的支持,本文將介紹如何在Vue 3中使用Vue Router實現(xiàn)動態(tài)路由導(dǎo)航,需要的朋友可以參考下
    2024-08-08
  • vue通過數(shù)據(jù)過濾實現(xiàn)表格合并

    vue通過數(shù)據(jù)過濾實現(xiàn)表格合并

    這篇文章主要為大家詳細(xì)介紹了vue通過數(shù)據(jù)過濾實現(xiàn)表格合并,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Vue3?$emit用法指南(含選項API、組合API及?setup?語法糖)

    Vue3?$emit用法指南(含選項API、組合API及?setup?語法糖)

    這篇文章主要介紹了Vue3?$emit用法指南,使用?emit,我們可以觸發(fā)事件并將數(shù)據(jù)傳遞到組件的層次結(jié)構(gòu)中,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Vue狀態(tài)管理庫Pinia詳細(xì)介紹

    Vue狀態(tài)管理庫Pinia詳細(xì)介紹

    這篇文章主要介紹了Vue3-pinia狀態(tài)管理,pinia是 vue3 新的狀態(tài)管理工具,簡單來說相當(dāng)于之前 vuex,它去掉了 Mutations 但是也是支持 vue2 的,需要的朋友可以參考下
    2022-08-08
  • Vue學(xué)習(xí)筆記進(jìn)階篇之函數(shù)化組件解析

    Vue學(xué)習(xí)筆記進(jìn)階篇之函數(shù)化組件解析

    本篇文章主要介紹了Vue學(xué)習(xí)筆記進(jìn)階篇之函數(shù)化組件探究,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 關(guān)于SpringBoot與Vue交互跨域問題解決方案

    關(guān)于SpringBoot與Vue交互跨域問題解決方案

    最近在利用springboot+vue整合開發(fā)一個前后端分離的個人博客網(wǎng)站,所以這一篇總結(jié)一下在開發(fā)中遇到的一個問題,關(guān)于解決在使用vue和springboot在開發(fā)前后端分離的項目時,如何解決跨域問題。在這里分別分享兩種方法,分別在前端vue中解決和在后臺springboot中解決。
    2021-10-10
  • Vue組件和Route的生命周期實例詳解

    Vue組件和Route的生命周期實例詳解

    這篇文章主要介紹了Vue組件和Route的生命周期的相關(guān)知識,需要的朋友可以參考下
    2018-02-02

最新評論

清远市| 章丘市| 莆田市| 平和县| 北川| 拜城县| 金乡县| 信阳市| 英德市| 涿鹿县| 商水县| 绥阳县| 东乌珠穆沁旗| 伽师县| 深州市| 临清市| 衡南县| 同心县| 特克斯县| 常德市| 益阳市| 商河县| 舟山市| 巩义市| 阳信县| 商都县| 景宁| 资阳市| 上犹县| 安丘市| 屏东市| 三穗县| 扬中市| 安达市| 璧山县| 徐水县| 雷山县| 阿尔山市| 沽源县| 西峡县| 东城区|