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

elementui[el-table]toggleRowSelection默認(rèn)多選事件無(wú)法選中問(wèn)題

 更新時(shí)間:2023年11月17日 16:46:45   作者:墨水白云  
這篇文章主要介紹了elementui[el-table]toggleRowSelection默認(rèn)多選事件無(wú)法選中問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

問(wèn)題

今天發(fā)現(xiàn)了一個(gè)elment el-table toggleRowSelection事件無(wú)法默認(rèn)選中的情況,

我的需求可能需要對(duì)內(nèi)容進(jìn)行一部分修改,比如:我默認(rèn)選中的內(nèi)容必須得通過(guò)接口或者其他方式來(lái)獲取,然后再默認(rèn)選中

解決方式

// 這里通過(guò)循環(huán)選中列表multipleSelection,然后從所有列表tableData中找到需要選中的項(xiàng)來(lái)幫助選中,直接使用選中列表來(lái)設(shè)置可能會(huì)出錯(cuò)
toggleSelection(rows) {
  // multipleSelection是一個(gè)選中數(shù)據(jù)列表
  // tableData 是所有的數(shù)據(jù)列表
  this.multipleSelection.forEach(row => {
    // 不能自己自定義對(duì)象來(lái)設(shè)置選中(原因如下分析),那我可以從列表中找到需要選中的那個(gè)對(duì)象,然后把它拿過(guò)來(lái)作為選中的項(xiàng)就可以了
  	this.$refs.multipleTable.toggleRowSelection(this.tableData.find(item=>{
      return row.name == item.name;  // 注意這里尋找的字段要唯一,示例僅參考
    }),true);
  });
}

另外一種無(wú)法選中的方式

原因可能在于vue組件和表格的渲染順序問(wèn)題。如:代碼執(zhí)行的時(shí)候頁(yè)面渲染還未完成。(表格放在dialog之類的彈出框里面) 

解決方式:

在循環(huán)的外層加個(gè)$nextTick即可

this.$nextTick(()=>{
	this.multipleSelection.forEach(row => {
	    console.log(row); // 這里僅僅加了個(gè)打印操作
	    this.$refs.multipleTable.toggleRowSelection(this.tableData.find(item=>{
      		return row.name == item.name;  // 注意這里尋找的字段要唯一,示例僅參考
   		}),true);
	});
})

分析

自己研究了一下elementUI el-table 的多選內(nèi)容:

官方代碼如圖:

<template>
  <el-table
    ref="multipleTable"
    :data="tableData"
    tooltip-effect="dark"
    style="width: 100%"
    @selection-change="handleSelectionChange">
    <el-table-column
      type="selection"
      width="55">
    </el-table-column>
    <el-table-column
      label="日期"
      width="120">
      <template slot-scope="scope">{{ scope.row.date }}</template>
    </el-table-column>
    <el-table-column
      prop="name"
      label="姓名"
      width="120">
    </el-table-column>
    <el-table-column
      prop="address"
      label="地址"
      show-overflow-tooltip>
    </el-table-column>
  </el-table>
  <div style="margin-top: 20px">
    <el-button @click="toggleSelection([tableData[1], tableData[2]])">切換第二、第三行的選中狀態(tài)</el-button>
    <el-button @click="toggleSelection()">取消選擇</el-button>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        tableData: [{
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1518 弄'
        }, {
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1518 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1518 弄'
        }, {
          date: '2016-05-08',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1518 弄'
        }, {
          date: '2016-05-06',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1518 弄'
        }, {
          date: '2016-05-07',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1518 弄'
        }],
        multipleSelection: []
      }
    },

    methods: {
      toggleSelection(rows) {
        if (rows) {
          rows.forEach(row => {
            this.$refs.multipleTable.toggleRowSelection(row);
          });
        } else {
          this.$refs.multipleTable.clearSelection();
        }
      },
      handleSelectionChange(val) {
        this.multipleSelection = val;
      }
    }
  }
</script>

上面的代碼就是官方代碼、使用效果如下:

從圖中看,確實(shí)可以進(jìn)行行數(shù)的默認(rèn)選中

(以上都是官方內(nèi)容);

然而我的需求可能需要對(duì)內(nèi)容進(jìn)行一部分修改,比如:我默認(rèn)選中的內(nèi)容必須得通過(guò)接口或者其他方式來(lái)獲取,然后再默認(rèn)選中

示例如下:

// 這個(gè)假如是通過(guò)接口或者其他形勢(shì)獲得的某個(gè)選中行內(nèi)容
// 注意這里多了幾個(gè)字段
multipleSelection: [
  {
    date: "2016-05-07",
    name: "王小虎",
    address: "上海市普陀區(qū)金沙江路 1518 弄",
    description: '這里是描述',
    type: '類型',
    id: 'aaaaa111111'
  }
]
// 因此我的選中代碼必須得改成如下:
toggleSelection() {
  // 循環(huán)multipleSelection,然后將內(nèi)容提取出我要的字段
  // 使其于table表行字段對(duì)應(yīng)
  this.multipleSelection.forEach(row => {
    let arr = {
      date: row.date,
      name: row.name,
      address: row.address
    };
    // 設(shè)置默認(rèn)選中列
    this.$refs.multipleTable.toggleRowSelection(arr,true);
  });
}

理論上上面的內(nèi)容應(yīng)該能讓表格中的某一列進(jìn)行選中,

然而現(xiàn)實(shí)是不行的

從上面可以看出來(lái),首部有選擇效果,但是卻內(nèi)容選中內(nèi)容。

現(xiàn)在對(duì)官方示例分析:

toggleSelection(rows) {
  if (rows) {
     rows.forEach(row => {
       console.log(row); // 這里僅僅加了個(gè)打印操作
       this.$refs.multipleTable.toggleRowSelection(row);
     });
   } else {
     this.$refs.multipleTable.clearSelection();
   }
}

效果如下:此時(shí)可以選中

然后對(duì)代碼進(jìn)行細(xì)微修改

toggleSelection(rows) {
  if (rows) {
     rows.forEach(row => {
       // 區(qū)別僅僅是將內(nèi)容放在arr對(duì)象里面了,用于提取需要的字段
       let arr = {
       		date: row.date,
      		name: row.name,
      		address: row.address
       }
       console.log(arr); // 打印操作
       this.$refs.multipleTable.toggleRowSelection(arr);
     });
   } else {
     this.$refs.multipleTable.clearSelection();
   }
}

效果如下:首部選中,其他行卻沒(méi)選中

這是為什么呢?明明傳入的同樣是一個(gè)對(duì)象啊,而且字段名稱與數(shù)量都是一樣的,然而結(jié)果卻不同?

對(duì)比兩個(gè)打印的內(nèi)容發(fā)現(xiàn)問(wèn)題:兩個(gè)打印的字段是有一點(diǎn)點(diǎn)細(xì)微的區(qū)別的。然而我個(gè)人實(shí)力有限,無(wú)法找到區(qū)別的原理是什么!哎!

有可能是官方的一個(gè)Bug,也可能是官方設(shè)計(jì)如此,可以去官方git上逛逛:

https://github.com/ElemeFE/element/issues

但是問(wèn)題卻也是可以解決的(在最上面)。

總結(jié)

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

相關(guān)文章

  • vue?router?動(dòng)態(tài)路由清除方式

    vue?router?動(dòng)態(tài)路由清除方式

    這篇文章主要介紹了vue?router?動(dòng)態(tài)路由清除方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue3全局導(dǎo)入bootstrap5方式

    vue3全局導(dǎo)入bootstrap5方式

    這篇文章主要介紹了vue3全局導(dǎo)入bootstrap5方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue-cli proxyTable 解決開(kāi)發(fā)環(huán)境的跨域問(wèn)題詳解

    Vue-cli proxyTable 解決開(kāi)發(fā)環(huán)境的跨域問(wèn)題詳解

    本篇文章主要介紹了Vue-cli proxyTable 解決開(kāi)發(fā)環(huán)境的跨域問(wèn)題詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-05-05
  • vue如何動(dòng)態(tài)生成andv圖標(biāo)

    vue如何動(dòng)態(tài)生成andv圖標(biāo)

    這篇文章主要介紹了vue如何動(dòng)態(tài)生成andv圖標(biāo)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 解決vue路由后界面沒(méi)有變化,但是鏈接有的問(wèn)題

    解決vue路由后界面沒(méi)有變化,但是鏈接有的問(wèn)題

    今天小編就為大家分享一篇解決vue路由后界面沒(méi)有變化,但是鏈接有的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 詳細(xì)聊聊vue中組件的props屬性

    詳細(xì)聊聊vue中組件的props屬性

    父子組件之間的通信就是props down,events up,父組件通過(guò)屬性props向下傳遞數(shù)據(jù)給子組件,子組件通過(guò)事件events 給父組件發(fā)送消息,這篇文章主要給大家介紹了關(guān)于vue中組件的props屬性的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • vue3雙向綁定實(shí)現(xiàn)原理解讀

    vue3雙向綁定實(shí)現(xiàn)原理解讀

    這篇文章主要介紹了vue3雙向綁定實(shí)現(xiàn)原理解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 一文詳解如何用Three.js和Vue?3實(shí)現(xiàn)3D商品展示

    一文詳解如何用Three.js和Vue?3實(shí)現(xiàn)3D商品展示

    Three.js是一個(gè)基于JavaScript的開(kāi)源庫(kù),用于在網(wǎng)頁(yè)上創(chuàng)建和顯示3D圖形,這篇文章主要介紹了如何用Three.js和Vue?3實(shí)現(xiàn)3D商品展示的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-07-07
  • vue+tsc+noEmit導(dǎo)致打包報(bào)TS類型錯(cuò)誤問(wèn)題及解決方法

    vue+tsc+noEmit導(dǎo)致打包報(bào)TS類型錯(cuò)誤問(wèn)題及解決方法

    當(dāng)我們新建vue3項(xiàng)目,package.json文件會(huì)自動(dòng)給我添加一些配置選項(xiàng),這寫(xiě)選項(xiàng)基本沒(méi)有問(wèn)題,但是在實(shí)際操作過(guò)程中,當(dāng)項(xiàng)目越來(lái)越復(fù)雜就會(huì)出現(xiàn)問(wèn)題,本文給大家分享vue+tsc+noEmit導(dǎo)致打包報(bào)TS類型錯(cuò)誤問(wèn)題及解決方法,感興趣的朋友一起看看吧
    2023-10-10
  • Vue中的計(jì)算屬性computed傳參方式

    Vue中的計(jì)算屬性computed傳參方式

    這篇文章主要介紹了Vue中的計(jì)算屬性computed傳參方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論

称多县| 茂名市| 乌拉特中旗| 沭阳县| 芦山县| 车致| 龙里县| 石楼县| 常熟市| 许昌县| 清远市| 麻栗坡县| 隆子县| 三门县| 怀柔区| 木兰县| 巧家县| 普陀区| 双鸭山市| 大姚县| 富平县| 水富县| 邳州市| 拉萨市| 公安县| 邮箱| 灌南县| 瓦房店市| 延川县| 关岭| 长垣县| 息烽县| 饶河县| 绥阳县| 平安县| 保定市| 沙河市| 页游| 昌黎县| 卓尼县| 大关县|