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

Vue多選框保留勾選數(shù)據(jù)實現(xiàn)方式

 更新時間:2025年08月26日 16:13:07   作者:慕白Lee  
文章瀏覽閱讀1.2w次,點贊2次,收藏6次。文章講述了在Vue.js組件開發(fā)中遇到的分組數(shù)據(jù)選中狀態(tài)保存問題,通過三個階段的探索,最終使用ElementUI的reserve-selection屬性解決了數(shù)據(jù)切換與勾選狀態(tài)保留的難題,并提供了相關(guān)代碼示例和優(yōu)化建議。

背景

封裝組件的時候遇到一個場景:

查詢兩個接口數(shù)據(jù)得到兩個分組集合, 需要動態(tài)切換分組選中狀態(tài), 

刷新最新的并集,并且可以保留勾選狀態(tài)+模糊搜索, 兩個分組會存在相同元素的可能.

  • 第一階段:初始化頁面的時候請求接口并保存初始分組數(shù)據(jù), 一開始是定義了兩個集合用來保存:data的數(shù)據(jù), 集合數(shù)據(jù)動態(tài)切換變化的時候直接獲取最新的, 但是缺點是不能保存勾選狀態(tài).
  • 第二階段:發(fā)現(xiàn)只能操作原:data的數(shù)據(jù), 所謂的checked再往回賦值根本沒用. 缺點是數(shù)據(jù)操作和列表數(shù)據(jù)模糊查詢不能實現(xiàn).
  • 第三階段:發(fā)現(xiàn)了reserve-selection這個東東, 近乎完美解決問題

總結(jié):遇到問題先別急著造輪子, 大概率有對應(yīng)的功能標(biāo)簽了, 一般的業(yè)務(wù)根本觸及不到vue的設(shè)計缺陷的...?

問題分析與解決

第一階段:初始化與數(shù)據(jù)同步

在頁面初始化時,通過請求接口保存兩個分組的初始數(shù)據(jù)。

定義兩個集合來保存數(shù)據(jù),并在集合數(shù)據(jù)變化時直接獲取最新的數(shù)據(jù)。

這個方法的缺點是無法保存用戶的勾選狀態(tài)。

第二階段:直接操作原始數(shù)據(jù)

后來發(fā)現(xiàn),必須直接操作原始的 data 數(shù)據(jù)集合。

嘗試將勾選狀態(tài)作為屬性賦值回數(shù)據(jù)集合是無效的,同時也無法實現(xiàn)數(shù)據(jù)操作和列表模糊查詢的需求。

第三階段:引入reserve-selection

最終,使用 reserve-selection 屬性解決了勾選狀態(tài)保留的問題,這表明在遇到問題時應(yīng)該首先考慮框架或庫本身是否提供了解決方案,而不是急于自己編寫解決方案。

保存數(shù)據(jù)勾選狀態(tài)reserve-selection

demo簡化演示

        <el-table ref="table" :row-key="rowKey" :data="tableData" @selection-change="selectionChange"
          max-height="666px">
          <el-table-column type="selection" label="全部" width="55" align="center" :reserve-selection="true" />
          <el-table-column label="姓名" align="left" prop="name" />
          <el-table-column label="手機(jī)號" align="left" prop="phone"/>
        </el-table>
 methods: {   
     rowKey(row) {
        //row-key就是要指定一個key標(biāo)識這一行的數(shù)據(jù),保證唯一即可
        return row.id;
     },
    // 列表選擇,val選中的表格行數(shù)據(jù)
    selectionChange(val) {
      console.log(val)
    },
    //清除表格所有的選中項
     clearSelect(){
        //方法1
        this.$refs["table"].clearSelection();
        //方法2
        this.$refs.buyerTable.clearSelection();
     },

},

reserve-selection完整使用小例

在Vue.js中,`reserve-selection` 是一個用于 `<el-table>` 組件(基于 Element UI)的屬性,用于在表格分頁時保留已選中的行。

當(dāng) `reserve-selection` 屬性設(shè)置為 `true` 時,表格在分頁時會保留已選中的行,而不會清除選中狀態(tài)。這樣,在用戶切換分頁時,之前選中的行將保持選中狀態(tài)。

下面是一個示例,演示了如何在 `<el-table>` 組件中使用 `reserve-selection` 屬性:

<template>
  <el-table
    :data="tableData"
    :reserve-selection="true"
    @selection-change="handleSelectionChange"
  >
    <el-table-column type="selection"></el-table-column>
    <el-table-column prop="name" label="Name"></el-table-column>
    <el-table-column prop="age" label="Age"></el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: 'John', age: 25 },
        { name: 'Jane', age: 30 },
        { name: 'Bob', age: 35 },
      ],
      selectedRows: [],
    };
  },
  methods: {
    handleSelectionChange(selection) {
      this.selectedRows = selection;
    },
  },
};
</script>

在上面的示例中,`reserve-selection` 屬性設(shè)置為 `true`,并且通過 `@selection-change` 事件監(jiān)聽器,將選中的行存儲在 `selectedRows` 數(shù)組中。

當(dāng)用戶在表格中選擇行時,`handleSelectionChange` 方法會被調(diào)用,將選中的行存儲在 `selectedRows` 數(shù)組中。即使用戶切換分頁,已選中的行也會保持選中狀態(tài)。

請注意:

  • reserve-selection屬性僅適用于基于 Element UI 的<el-table>組件。
  • 如果您使用的是其他表格組件或自定義的表格組件,可能沒有類似的屬性或功能。
  • 在這種情況下,您可能需要自行實現(xiàn)保留選中狀態(tài)的邏輯。

清除某些選中項

基于上述理解, 還要實現(xiàn)選中項清空的功能

demo代碼

        for (let i = 0; i < this.selections.length; i++) {
          if (true) {
            this.$refs.table.toggleRowSelection(this.selections[i]);
            i--;
          }
        }
 

相關(guān)知識點

this.$refs.table.toggleRowSelection 是在Vue.js中使用$refs訪問組件實例的特殊語法。它用于在Vue組件中的方法中調(diào)用子組件的方法或訪問子組件的屬性。

假設(shè)您有一個名為 table 的子組件,并且在父組件中使用了 ref="table" 來引用該子組件。那么,通過 this.$refs.table,您可以訪問到子組件的實例,從而調(diào)用子組件的方法或訪問子組件的屬性。

toggleRowSelection 是一個假設(shè) table 子組件中有一個名為 toggleRowSelection 的方法的示例。它的作用是切換表格中某一行的選中狀態(tài)。

例如,假設(shè)您的 table 子組件具有以下方法:

methods: {
  toggleRowSelection(row) {
    // 在這里實現(xiàn)切換行選中狀態(tài)的邏輯
  }
}

然后,在父組件中的某個方法中,您可以使用 this.$refs.table.toggleRowSelection(row) 來調(diào)用子組件的 toggleRowSelection 方法,并傳遞相應(yīng)的行數(shù)據(jù)作為參數(shù)。

這樣,您可以在父組件中控制子組件的行選中狀態(tài)。

請注意:

  • 使用 $refs 訪問子組件的實例是一種直接操作子組件的方法,但也可能導(dǎo)致父子組件之間的耦合增加。
  • 在設(shè)計和開發(fā)過程中,請謹(jǐn)慎使用 $refs,并確保遵循Vue.js的組件通信原則。

細(xì)節(jié)優(yōu)化

  • 清除某行數(shù)據(jù)時, 集合的長度會實時變化,  如果按照原有索引去刪除就會少刪.
  • 所以, 正序刪的時候, 每刪除一個就要索引-1
  • 反序刪直接刪就行

擴(kuò)展方向思考

  • 狀態(tài)同步:如果兩個分組存在相同的元素,考慮使用一個映射表(例如使用 JavaScript 對象)來同步這些元素的勾選狀態(tài)。
  • 模糊搜索:可以在組件內(nèi)部實現(xiàn)一個搜索方法,該方法能夠在用戶輸入搜索關(guān)鍵字時過濾數(shù)據(jù)并更新表格。
  • 性能考慮:如果數(shù)據(jù)集非常大,考慮使用虛擬滾動或分頁來提高性能。
  • 用戶體驗:提供清晰的用戶反饋,例如在切換分組或執(zhí)行搜索時顯示加載指示器。

通過以上的優(yōu)化,可以確保組件在處理復(fù)雜數(shù)據(jù)和用戶交互時保持高性能和良好的用戶體驗。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue3.0在子組件中觸發(fā)的父組件函數(shù)方式

    vue3.0在子組件中觸發(fā)的父組件函數(shù)方式

    這篇文章主要介紹了vue3.0在子組件中觸發(fā)的父組件函數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 解析Vue2.0雙向綁定實現(xiàn)原理

    解析Vue2.0雙向綁定實現(xiàn)原理

    本篇文章主要介紹了解析Vue2.0雙向綁定實現(xiàn)原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • vue中使用axios固定url請求前綴

    vue中使用axios固定url請求前綴

    這篇文章主要介紹了vue中使用axios固定url請求前綴的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Vue項目中如何配置src文件下的@別名

    Vue項目中如何配置src文件下的@別名

    這篇文章主要介紹了Vue項目中如何配置src文件下的@別名問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue2.0父子組件及非父子組件之間的通信方法

    vue2.0父子組件及非父子組件之間的通信方法

    這篇文章給大家介紹了vue2.0父子組件及非父子組件之間的通信方法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-01-01
  • vue實現(xiàn)flv格式視頻播放效果

    vue實現(xiàn)flv格式視頻播放效果

    這篇文章主要介紹了vue實現(xiàn)flv格式視頻播放,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • el-table表格排序(多列排序和遠(yuǎn)程排序)

    el-table表格排序(多列排序和遠(yuǎn)程排序)

    本文主要介紹了el-table表格排序(多列排序和遠(yuǎn)程排序),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Vue混入與插件的使用介紹

    Vue混入與插件的使用介紹

    這篇文章主要介紹了Vue混入與插件的使用,mixins(混入),官方的描述是一種分發(fā) Vue 組件中可復(fù)用功能的非常靈活的方式,mixins是一個js對象,它可以包含我們組件中script項中的任意功能選項,如data、components、methods 、created、computed等等
    2022-09-09
  • 使用vite項目打包資源分配目錄

    使用vite項目打包資源分配目錄

    這篇文章主要介紹了使用vite項目打包資源分配目錄方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Vue多選列表組件深入詳解

    Vue多選列表組件深入詳解

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

最新評論