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

如何用vue2+element-ui實(shí)現(xiàn)多行行內(nèi)表格編輯

 更新時(shí)間:2024年08月21日 08:32:01   作者:沒(méi)資格抱怨  
最近開(kāi)發(fā)項(xiàng)目,關(guān)于表格的數(shù)據(jù)操作比較多,這個(gè)地方個(gè)人覺(jué)得比較難搞,特此記錄一下,這篇文章主要給大家介紹了關(guān)于如何用vue2+element-ui實(shí)現(xiàn)多行行內(nèi)表格編輯的相關(guān)資料,需要的朋友可以參考下

效果圖展示

當(dāng)在表格中點(diǎn)擊編輯按鈕時(shí):

點(diǎn)擊的行變成文本框且數(shù)據(jù)回顯可以點(diǎn)擊確定按鈕修改數(shù)據(jù)或者取消修改回退數(shù)據(jù):

具體實(shí)現(xiàn)步驟

1. 行數(shù)據(jù)定義編輯標(biāo)記

行數(shù)據(jù)定義編輯標(biāo)記

當(dāng)在組件中獲取到用于表格展示數(shù)據(jù)的方法中,針對(duì)每一行數(shù)據(jù)添加一個(gè)編輯標(biāo)記

this.list.forEach(item => {
        // item.isEdit = false // 添加一個(gè)屬性 初始值為false
        // 數(shù)據(jù)響應(yīng)式的問(wèn)題  數(shù)據(jù)變化 視圖更新
        // 添加的動(dòng)態(tài)屬性 不具備響應(yīng)式特點(diǎn)
        // this.$set(目標(biāo)對(duì)象, 屬性名稱, 初始值) 可以針對(duì)目標(biāo)對(duì)象 添加的屬性 添加響應(yīng)式
        this.$set(item, 'isEdit', false)
      })

 注意:為什么不使用item.isEdit = false , 因?yàn)閯?dòng)態(tài)添加的屬性不具備響應(yīng)式的特點(diǎn),如果想要具備響應(yīng)式,可以使用$set

2. 點(diǎn)擊行編輯標(biāo)記狀態(tài)(isEdit)

點(diǎn)擊編輯時(shí),將當(dāng)前行的標(biāo)記isEdit設(shè)置為true

<el-table-column align="center" label="操作">
    <template>
        <!-- 非編輯狀態(tài) -->
        <el-button size="mini" type="text">分配權(quán)限</el-button>
        <el-button size="mini" type="text" @click="btnEditRow(row)">編輯</el-button>
        <el-button size="mini" type="text">刪除</el-button>
    </template>
</el-table-column>

點(diǎn)擊編輯的方法

// 點(diǎn)擊編輯行
btnEditRow(row) {
  row.isEdit = true // 改變行的編輯狀態(tài)
}

3. 插槽根據(jù)標(biāo)記渲染表單

el-table-column組件中使用<template v-slot="{ row }">作用域插槽獲取當(dāng)前行的信息

所以在表格列中可以借助當(dāng)前行的信息根據(jù)當(dāng)前的isEdit標(biāo)記-渲染結(jié)構(gòu)

<el-table-column prop="name" align="center" width="200" label="角色">
      <template v-slot="{ row }">
        <!-- 條件判斷 -->
        <el-input v-if="row.isEdit" size="mini" />
        <span v-else>{{ row.name }}</span>
      </template>
</el-table-column>
<el-table-column prop="state" align="center" width="200" label="啟用">
          <!-- 自定義列結(jié)構(gòu) -->
    <template v-slot="{ row }">
        <el-switch v-if="row.isEdit" />
        <span v-else>  {{ row.state === 1 ? "已啟用" : row.state === 0 ? "未啟用" : "無(wú)" }} </span>
    </template>
</el-table-column>

$set的應(yīng)用

  • this.$set(目標(biāo)對(duì)象, 屬性名稱, 初始值 )
  • 等價(jià)于 Vue.set(目標(biāo)對(duì)象, 屬性名稱, 初始值)
  • 向響應(yīng)式對(duì)象中添加一個(gè)屬性,并確保這個(gè)新屬性同樣是響應(yīng)式的,且觸發(fā)視圖更新。

行內(nèi)編輯-數(shù)據(jù)緩存

行內(nèi)編輯需要做數(shù)據(jù)緩存

為什么要做數(shù)據(jù)緩存?

因?yàn)榫庉嫊r(shí),可以取消會(huì)滾到之前的狀態(tài),所以編輯時(shí)的數(shù)據(jù)是臨時(shí)的數(shù)據(jù)。

假設(shè)list數(shù)組中的name,state,description三個(gè)屬性是用于表格每列展示的數(shù)據(jù),當(dāng)進(jìn)行行內(nèi)編輯時(shí)需要將這3個(gè)屬性進(jìn)行緩存,因?yàn)榫庉嫷臄?shù)據(jù)是臨時(shí)的

如圖,editRow的數(shù)據(jù)是針對(duì)當(dāng)前行的數(shù)據(jù)做了一份拷貝,針對(duì)這個(gè)拷貝,我們可以隨意修改。

1. 初始化時(shí)緩存數(shù)據(jù)

//緩存數(shù)據(jù)
this.list.forEach(item => {
        this.$set(item, 'isEdit', false)
        this.$set(item, 'editRow', {
          name: item.name,
          state: item.state,
          description: item.description
        })
  })

2. 點(diǎn)擊編輯時(shí)更新緩存數(shù)據(jù)

btnEditRow(row) {
      row.isEdit = true // 改變行的編輯狀態(tài)
      // 更新緩存數(shù)據(jù)
      row.editRow.name = row.name
      row.editRow.state = row.state
      row.editRow.description = row.description
}

3. 將編輯時(shí)的表單雙向綁定緩存數(shù)據(jù)

<el-table-column prop="name" align="center" width="200" label="角色">
          <template v-slot="{ row }">
            <!-- 條件判斷 -->
            <!-- 編輯狀態(tài) -->
            <el-input v-if="row.isEdit" v-model="row.editRow.name" size="mini" />
            <!-- 非編輯狀態(tài) -->
            <span v-else>{{ row.name }}</span>
          </template>
</el-table-column>

行內(nèi)編輯-確定取消按鈕

1. 確定按鈕

el-table中不能使用表單所以在確定按鈕的回調(diào)中要進(jìn)行手動(dòng)判斷

然后將編輯好的數(shù)據(jù)封裝到一個(gè)對(duì)象中發(fā)起請(qǐng)求

下方使用Object.assign方法是因?yàn)榘l(fā)送完請(qǐng)求,數(shù)據(jù)庫(kù)數(shù)據(jù)已更新,而前端頁(yè)面也需要更新

<el-button type="primary" size="mini" @click="btnEditOK(row)">確定</el-button>

// 點(diǎn)擊確定時(shí)觸發(fā)
    async  btnEditOK(row) {
      if (row.editRow.name && row.editRow.description) {
        // 下一步操作
        await updateRole({ ...row.editRow, id: row.id })
        // 更新成功
        this.$message.success('更新角色成功')
        // 更新顯示數(shù)據(jù)  退出編輯狀態(tài)
        // row.name = row.editRow.name // eslint的一校驗(yàn) 誤判
        // Object.assign(target, source)
        Object.assign(row, {
          ...row.editRow,
          isEdit: false // 退出編輯模式
        }) // 規(guī)避eslint的誤判
      } else {
        this.$message.warning('角色和描述不能為空')
      }
    }

注意: 這里既然更新成功了,要把緩存數(shù)據(jù)回顯到頁(yè)面上,并且關(guān)閉編輯模式

2. 取消按鈕

關(guān)閉編輯狀態(tài)即可

<el-button size="mini" @click="row.isEdit = false">取消</el-button>

總結(jié) 

到此這篇關(guān)于如何用vue2+element-ui實(shí)現(xiàn)多行行內(nèi)表格編輯的文章就介紹到這了,更多相關(guān)vue2+element-ui多行行內(nèi)表格編輯內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue.js實(shí)現(xiàn)高質(zhì)量翻頁(yè)功能的完整開(kāi)發(fā)指南

    Vue.js實(shí)現(xiàn)高質(zhì)量翻頁(yè)功能的完整開(kāi)發(fā)指南

    當(dāng)我們?cè)诰W(wǎng)頁(yè)中展示大量數(shù)據(jù)時(shí),分頁(yè)能幫助用戶快速瀏覽內(nèi)容,提高頁(yè)面的加載性能和用戶體驗(yàn),本文將從基礎(chǔ)翻頁(yè)功能入手,逐步升級(jí)至可復(fù)用的分頁(yè)組件,并提供性能優(yōu)化和用戶體驗(yàn)提升的實(shí)用建議,需要的朋友可以參考下
    2025-07-07
  • laravel-admin 與 vue 結(jié)合使用實(shí)例代碼詳解

    laravel-admin 與 vue 結(jié)合使用實(shí)例代碼詳解

    由于 Laravel-admin 采用的是 pjax 的方式刷新頁(yè)面,意味著很多頁(yè)面刷新的操作,這篇文章主要介紹了laravel-admin 與 vue 結(jié)合使用,需要的朋友可以參考下
    2019-06-06
  • Vue實(shí)現(xiàn)push數(shù)組并刪除的例子

    Vue實(shí)現(xiàn)push數(shù)組并刪除的例子

    今天小編就為大家分享一篇Vue實(shí)現(xiàn)push數(shù)組并刪除的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • elementUI+Springboot實(shí)現(xiàn)導(dǎo)出excel功能的全過(guò)程

    elementUI+Springboot實(shí)現(xiàn)導(dǎo)出excel功能的全過(guò)程

    這篇文章主要介紹了elementUI+Springboot實(shí)現(xiàn)導(dǎo)出excel功能,現(xiàn)在也對(duì)這個(gè)導(dǎo)出功能進(jìn)行一個(gè)匯總整理寫出來(lái),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • vue 無(wú)法覆蓋vant的UI組件的樣式問(wèn)題

    vue 無(wú)法覆蓋vant的UI組件的樣式問(wèn)題

    這篇文章主要介紹了vue 無(wú)法覆蓋vant的UI組件的樣式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue el-checkbox實(shí)現(xiàn)全選單選方式

    vue el-checkbox實(shí)現(xiàn)全選單選方式

    這篇文章主要介紹了vue el-checkbox實(shí)現(xiàn)全選單選方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 使用watch監(jiān)聽(tīng)對(duì)象里面值的變化

    使用watch監(jiān)聽(tīng)對(duì)象里面值的變化

    這篇文章主要介紹了使用watch監(jiān)聽(tīng)對(duì)象里面值的變化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue中的Object.defineProperty全面理解

    Vue中的Object.defineProperty全面理解

    這篇文章主要介紹了Vue中的Object.defineProperty全面理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue項(xiàng)目npm操作npm run serve或npm run dev報(bào)錯(cuò)及二者的區(qū)別

    Vue項(xiàng)目npm操作npm run serve或npm run dev報(bào)錯(cuò)及二者

    這篇文章主要介紹了Vue項(xiàng)目npm操作npm run serve或npm run dev報(bào)錯(cuò)及二者的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue實(shí)現(xiàn)生成二維碼的簡(jiǎn)單方式

    Vue實(shí)現(xiàn)生成二維碼的簡(jiǎn)單方式

    與后端生成二維碼相比,前端生成二維碼更具有靈活性,下面這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)生成二維碼的簡(jiǎn)單方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01

最新評(píng)論

青神县| 临洮县| 灵璧县| 固始县| 本溪市| 锦州市| 海城市| 抚远县| 外汇| 敦煌市| 运城市| 乌兰浩特市| 芒康县| 大渡口区| 宜川县| 巴塘县| 木兰县| 惠水县| 揭阳市| 太原市| 荆门市| 尉犁县| 舞阳县| 三原县| 贺州市| 福州市| 奉节县| 庆城县| 曲沃县| 青浦区| 华蓥市| 固原市| 双城市| 固始县| 乌恰县| 衢州市| 洪湖市| 十堰市| 峡江县| 庆元县| 双鸭山市|