iview + vue table 分頁(yè)記憶

開(kāi)發(fā)過(guò)程中供炼,我們時(shí)常會(huì)用到表格組件一屋,一般翻頁(yè)由后臺(tái)實(shí)現(xiàn),當(dāng)我們需要實(shí)現(xiàn)表格多選時(shí)袋哼,翻頁(yè)導(dǎo)致數(shù)據(jù)重新刷新冀墨,導(dǎo)致我們之前選擇的項(xiàng)無(wú)法保存。這里主要記錄下iview table 如何實(shí)現(xiàn):
代碼如下:

<template>
  <div id="add-edit-wrap">
    <Tabs value="name1">
      <TabPane label="單詞列表" name="name1" :disabled="this.albumListObj ? false : true">
        <Button type='primary' icon="minus" @click="delBatches" style="margin-bottom: 20px;">批量刪除</Button>
        <Table @on-selection-change="selectionChange" :loading="tableLoading" :columns="tabcol" :data="tabledata" :border="true"></Table>
        <div class="page-wrap" style="margin-top: 20px; text-align: right;">
          <Page
            show-total
            :total="listTotal"
            :page-size="listParams.pageSize"
            :current="listParams.page"
            show-elevator
            @on-change="changePageList"
          ></Page>
        </div>
      </TabPane>
    </Tabs>
  </div>
</template>

<script>
const uniqBy = require("lodash.uniqby")
const remove = require("lodash.remove")
const differenceBy = require("lodash.differenceby")
import { searchAlbum, addAlbum, editAlbum, searchBindAlbumWord, delBindAlbumWord, vocabularyList, bindAlbumWord } from '@/api/spoken'
import { mapState } from 'vuex'
export default {
  name: 'spokenDetail',
  data() {
    return {
      albumDatas: {
        albumName: '',
        albumIntro: ''
      },
      file: null,
      loadingStatus: false,
      upLoadUrl: '',

      imgUrl: '',
      id: null,

      // 單詞列表
      tableLoading: false,
      tabcol: [
        {
          type: 'selection',
          width: 60,
          align: 'center'
        },
        {
          title: '問(wèn)題ID',
          key: 'id',
          align: 'center'
        },
        {
          title: '問(wèn)題',
          key: 'question',
          align: 'center'
        },
        {
          title: '回答',
          key: 'answer',
          align: 'center'
        },
        {
          title: '翻譯',
          key: 'translation',
          align: 'center'
        },
        {
          title: '描述',
          key: 'description',
          align: 'center'
        },
        {
            title: '操作',
            align: 'center',
            width: 162,
            render: (h, params) => {
              return h('div', [
                h('i-button', {
                  props: {
                    type: 'text',
                    size: 'large',
                    icon: 'trash-a'
                  },
                  on: {
                    click: () => {
                      this.$Modal.confirm({
                        title: '刪除',
                        content: `確定刪除該專(zhuān)輯綁定的詞匯嗎涛贯?`,
                        onOk: () => {
                          delBindAlbumWord({bindIds: params.row.bindId}).then(res => {
                            if (res.code === 200) {
                              this.$Message.success('刪除成功')
                              this.searchBindAlbumWordList()
                            } else {
                              this.$Message.error(res.msg)
                            }
                          })
                        }
                      })
                    }
                  }
                })
              ])
            }
          }
      ],
      tabledata: [],
      listParams: {
        page: 1,
        pageSize: 10,
        albumId: null
      },
      listTotal: 0,
      selection: [],

      selected: [],
      sureLoading: false
    }
  },
  computed: {
    ...mapState({
      albumListObj: 'albumListObj'
    })
  },
  created() {
    if (this.albumListObj) {
      // 編輯
      this.albumDatas.albumName = this.albumListObj.albumName
      this.albumDatas.albumIntro = this.albumListObj.albumIntro
      this.imgUrl = this.albumListObj.albumUrl
      this.id = this.albumListObj.id

      // 獲取該專(zhuān)輯下綁定的單曲
      this.listParams.albumId = this.albumListObj.id
      
      this.searchBindAlbumWordList()

    }
  },
  methods: {
    selectionChange(selection) {
      if (selection.length) {
        this.selection = selection.map((item) => {
          return item.bindId
        })
      } else {
        this.selection = []
      }
    },
    delBatches() {
      if (!this.selection.length) {
        this.$Message.error('請(qǐng)選擇需要?jiǎng)h除的詞匯诽嘉!')
        return
      }
      this.$Modal.confirm({
        title: '批量刪除',
        content: `確定批量刪除這些詞匯嗎?`,
        onOk: () => {
          let params = this.selection.join(',')
          delBindAlbumWord({bindIds: params}).then(res => {
            if (res.code === 200) {
              this.$Message.success('刪除成功!')
              this.searchBindAlbumWordList()
            } else {
              this.$Message.error(res.msg)
            }
          })
        }
      })
    },
    changePageList(val) {
      this.listParams.page = val
      this.searchBindAlbumWordList()
    },
    changePage(val) {
      this.searchVocDatas.page = val
      this.getvocabularyList()
    },
    getvocabularyList() {
      this.tableVocLoading = true
      vocabularyList(this.searchVocDatas).then(res => {
        this.tableVocLoading = false
        this.total = res.data.total
        this.tableVocdata = res.data.records
      }).then(res => {
        this.updateChecked()
      })
    },
    // 翻頁(yè)記憶
    handleCancel(selection, row) {
      //從已選項(xiàng)中去除取消項(xiàng)
      remove(this.selected, n => {
        return n.id === row.id
      });
    },
    handleSelect(selection, row) {
      //添加到已選項(xiàng)
      this.selected.push(row)
    },
    handleSelectAll(selection) {
      //數(shù)組合并弟翘,有可能用戶(hù)先選擇了某幾項(xiàng)虫腋,已經(jīng)被我們push進(jìn)去,因此數(shù)組合并需要去重一下
      this.selected = uniqBy(this.selected.concat(selection), "id")
    },
    handleCancelSelectAll(selection) {
      //從已選項(xiàng)中移除當(dāng)頁(yè)數(shù)據(jù)
      this.selected = differenceBy(this.selected, this.tableVocdata, "id")
    },
    //把源數(shù)據(jù)加上_checked字段稀余,遍歷已選項(xiàng)數(shù)據(jù)岔乔,更新選中狀態(tài)
    updateChecked() {
      for (var i = 0; i < this.tableVocdata.length; i++) {
        this.tableVocdata[i]._checked = false
        for (var j = 0; j < this.selected.length; j++) {
          if (this.selected[j].id === this.tableVocdata[i].id) {
            this.tableVocdata[i]._checked = true
            this.$refs.selection.objData[i]._isChecked = true
          }
        }
      }
    },
  }
}
</script>

```主要方法為updateChecked,每次獲取列表數(shù)據(jù)時(shí)去核對(duì)一遍數(shù)據(jù)滚躯, 利用this.$refs.selection.objData[i]._isChecked = true設(shè)置選中.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雏门,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掸掏,更是在濱河造成了極大的恐慌茁影,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丧凤,死亡現(xiàn)場(chǎng)離奇詭異募闲,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)愿待,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)浩螺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人仍侥,你說(shuō)我怎么就攤上這事要出。” “怎么了农渊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵患蹂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)传于,這世上最難降的妖魔是什么囱挑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮沼溜,結(jié)果婚禮上平挑,老公的妹妹穿的比我還像新娘。我一直安慰自己系草,他們只是感情好弹惦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著悄但,像睡著了一般棠隐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上檐嚣,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天助泽,我揣著相機(jī)與錄音,去河邊找鬼嚎京。 笑死嗡贺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鞍帝。 我是一名探鬼主播诫睬,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼帕涌!你這毒婦竟也來(lái)了摄凡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蚓曼,失蹤者是張志新(化名)和其女友劉穎亲澡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體纫版,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡床绪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了其弊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片癞己。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梭伐,靈堂內(nèi)的尸體忽然破棺而出痹雅,到底是詐尸還是另有隱情,我是刑警寧澤籽御,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布练慕,位于F島的核電站惰匙,受9級(jí)特大地震影響技掏,放射性物質(zhì)發(fā)生泄漏铃将。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一哑梳、第九天 我趴在偏房一處隱蔽的房頂上張望劲阎。 院中可真熱鬧,春花似錦鸠真、人聲如沸悯仙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锡垄。三九已至,卻和暖如春祭隔,著一層夾襖步出監(jiān)牢的瞬間货岭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工疾渴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留千贯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓搞坝,卻偏偏與公主長(zhǎng)得像搔谴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子桩撮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • https://www.cnblogs.com/Deribs4/p/5657746.html priority_q...
    dopami閱讀 493評(píng)論 0 0
  • 大花臉
    宋立軒閱讀 307評(píng)論 0 0
  • 昨夜和小仙女聊了好幾個(gè)小時(shí)敦第,已經(jīng)許久沒(méi)有過(guò)這種感覺(jué)了。這個(gè)小仙女難道我真的愛(ài)上了么店量?今天小仙女說(shuō)她不開(kāi)心申尼,都怪我這...
    白運(yùn)參閱讀 334評(píng)論 0 0