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

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

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

背景

封裝組件的時(shí)候遇到一個(gè)場(chǎng)景:

查詢(xún)兩個(gè)接口數(shù)據(jù)得到兩個(gè)分組集合, 需要?jiǎng)討B(tài)切換分組選中狀態(tài), 

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

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

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

問(wèn)題分析與解決

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

在頁(yè)面初始化時(shí),通過(guò)請(qǐng)求接口保存兩個(gè)分組的初始數(shù)據(jù)。

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

這個(gè)方法的缺點(diǎn)是無(wú)法保存用戶(hù)的勾選狀態(tài)。

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

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

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

第三階段:引入reserve-selection

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

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

demo簡(jiǎn)化演示

        <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ī)號(hào)" align="left" prop="phone"/>
        </el-table>
 methods: {   
     rowKey(row) {
        //row-key就是要指定一個(gè)key標(biāo)識(shí)這一行的數(shù)據(jù),保證唯一即可
        return row.id;
     },
    // 列表選擇,val選中的表格行數(shù)據(jù)
    selectionChange(val) {
      console.log(val)
    },
    //清除表格所有的選中項(xiàng)
     clearSelect(){
        //方法1
        this.$refs["table"].clearSelection();
        //方法2
        this.$refs.buyerTable.clearSelection();
     },

},

reserve-selection完整使用小例

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

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

下面是一個(gè)示例,演示了如何在 `<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`,并且通過(guò) `@selection-change` 事件監(jiān)聽(tīng)器,將選中的行存儲(chǔ)在 `selectedRows` 數(shù)組中。

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

請(qǐng)注意:

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

清除某些選中項(xiàng)

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

demo代碼

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

相關(guān)知識(shí)點(diǎn)

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

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

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

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

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

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

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

請(qǐng)注意:

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

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

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

擴(kuò)展方向思考

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

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

總結(jié)

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

相關(guān)文章

  • 用Vue編寫(xiě)抽象組件的方法

    用Vue編寫(xiě)抽象組件的方法

    這篇文章主要介紹了用Vue編寫(xiě)抽象組件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Vue項(xiàng)目打包為exe可安裝程序操作步驟

    Vue項(xiàng)目打包為exe可安裝程序操作步驟

    這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目打包為exe可安裝程序操作步驟的相關(guān)資料,Vue是一種流行的JavaScript框架,用于構(gòu)建單頁(yè)面應(yīng)用程序(SPA),需要的朋友可以參考下
    2023-12-12
  • vite+vue3不清除瀏覽器緩存直接下載最新代碼的解決方案

    vite+vue3不清除瀏覽器緩存直接下載最新代碼的解決方案

    vite+vue3項(xiàng)目發(fā)布后,瀏覽器上還是舊代碼,沒(méi)有及時(shí)更新到最新代碼,下面通過(guò)本文給大家分享vite+vue3不清除瀏覽器緩存直接下載最新代碼的解決方案,感興趣的朋友一起看看吧
    2024-06-06
  • vue 解決異步數(shù)據(jù)更新問(wèn)題

    vue 解決異步數(shù)據(jù)更新問(wèn)題

    今天小編就為大家分享一篇vue 解決異步數(shù)據(jù)更新問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • elementUI table如何給表頭添加氣泡顯示

    elementUI table如何給表頭添加氣泡顯示

    這篇文章主要介紹了elementUI table如何給表頭添加氣泡顯示問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • antd vue table跨行合并單元格,并且自定義內(nèi)容實(shí)例

    antd vue table跨行合并單元格,并且自定義內(nèi)容實(shí)例

    這篇文章主要介紹了antd vue table跨行合并單元格,并且自定義內(nèi)容實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • 詳解vue-cli腳手架中webpack配置方法

    詳解vue-cli腳手架中webpack配置方法

    這篇文章主要介紹了詳解vue-cli腳手架中webpack配置方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • vue2中如何更改el-dialog出場(chǎng)動(dòng)畫(huà)(el-dialog彈窗組件)

    vue2中如何更改el-dialog出場(chǎng)動(dòng)畫(huà)(el-dialog彈窗組件)

    el-dialog是一個(gè)十分好用的彈窗組件,但是出場(chǎng)動(dòng)畫(huà)比較單調(diào),于是決定自定義一個(gè)出場(chǎng)動(dòng)畫(huà),本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家敘述下實(shí)現(xiàn)思路,感興趣的朋友一起看看吧
    2022-06-06
  • Vue 項(xiàng)目部署在子目錄下時(shí)hash vs history 的真實(shí)區(qū)別解析

    Vue 項(xiàng)目部署在子目錄下時(shí)hash vs history 的真實(shí)區(qū)別解析

    Vue子目錄部署中,hash模式穩(wěn)定且無(wú)需后端配合,而history模式需要后端支持否則容易出問(wèn)題,子目錄部署下,hash模式天生安全且頁(yè)面刷新不會(huì)404,而history模式需要正確配置Nginx才能正常工作,本文給大家介紹Vue部署在子目錄下時(shí)hash vs history區(qū)別,感興趣的朋友一起看看吧
    2026-01-01
  • electron打包中的巨坑解決記錄

    electron打包中的巨坑解決記錄

    這篇文章主要為大家介紹了electron打包中的巨坑解決記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評(píng)論

武威市| 射阳县| 中方县| 绥化市| 潮安县| 太仆寺旗| 正阳县| 绿春县| 保亭| 松滋市| 仁怀市| 酒泉市| 印江| 临城县| 滨海县| 嘉兴市| 衡阳县| 常德市| 齐河县| 昭通市| 广宁县| 无棣县| 乌拉特后旗| 周宁县| 蚌埠市| 永城市| 从化市| 福清市| 池州市| 涿州市| 兴文县| 上高县| 东阳市| 木里| 邵阳市| 浑源县| 灵山县| 鹤山市| 沙河市| 滨州市| 车险|