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

antdesign-vue結(jié)合sortablejs實現(xiàn)兩個table相互拖拽排序功能

 更新時間:2021年01月08日 15:01:16   作者:心中有曲自然嗨丶  
這篇文章主要介紹了antdesign-vue結(jié)合sortablejs實現(xiàn)兩個table相互拖拽排序功能,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

實現(xiàn)效果

本來想在網(wǎng)上看看有沒有基于antdesign做的,然后發(fā)現(xiàn)是真的少??!廢話不多說,先上圖:

在這里插入圖片描述

sortablejs介紹

首先先來認識一下這個插件: sortablejs
大家可以去細讀一下它的api文檔:

在這里插入圖片描述

這邊我就著重介紹一下我用到的api。
1.group可以傳入對象,參數(shù)值為name,pull,put,
name:如果是要兩個列表下進行拖動的話,name的值必須為一樣;
pull:pull用來定義從這個列表容器移動出去的設(shè)置,true/false/‘clone'/function

  • true :列表容器內(nèi)的列表單元可以被移出;
  • false:列表容器內(nèi)的列表單元不可以被移出;
  • clone:列表單元移出,移動的為該元素的副本;
  • function:用來進行pull的函數(shù)判斷,可以進行復(fù)雜邏輯,在函數(shù)中return false/true來判斷是否移出;

put:put用來定義往這個列表容器放置列表單元的的設(shè)置,true/false/[‘foo',‘bar']/function;

  • true:列表容器可以從其他列表容器內(nèi)放入列表單元;
  • false:與true相反;
  • [‘foo',‘bar']:這個可以是一個字符串或者是字符串的數(shù)組,代表的是group配置項里定義的name值;
  • function:用來進行put的函數(shù)判斷,可以進行復(fù)雜邏輯,在函數(shù)中return false/true來判斷是否放入;

2.animation ms, number 單位:ms,定義排序動畫的時間;
3. handle: 格式為簡單css選擇器的字符串,使列表單元中符合選擇器的元素成為拖動的手柄,只有按住拖動手柄才能使列表單元進行拖動(你想讓哪個元素拖動就綁定這個元素的class);
4. onStart:function(evt){}開始拖拽的回調(diào)方法;
5. onUpdate:function(evt){}列表內(nèi)元素順序更新的回調(diào)方法;
6. onAdd:function(evt){}元素從一個列表拖拽到另一個列表的回調(diào)方法;
7. onRemove:function(evt){} 元素從列表中移除進入另一個列表的回調(diào)方法;
這個需求用到這些api也就足夠了。

具體實現(xiàn)

1.第一步先初始化sortable方法,因為我們的需求是兩個表格拖拽,所以初始化2個方法。
html代碼

<s-table
 ref="table"
 size="default"
 class="left-table"
 rowKey="key"
 :columns="columns"
 :data="loadData">
</s-table>
  
<s-table
 class="sort-table"
 ref="table2"
 size="default"
 class="left-table"
 rowKey="key"
 :columns="columns"
 :data="loadData">
</s-table>

具體的columns 和loadData就不多余闡述。

JS代碼

import Sortable from 'sortablejs'
methods:{
 // 初始化 sortable 實現(xiàn)拖動
 initSortable () {
 var that = this
 var el = this.$el.querySelector('.sort-table tbody')
 Sortable.create(el, {
 handle: '.ant-table-row',
 animation: 150,
 group: { name: 'name', pull: true, put: true },
 onUpdate: function (evt) {
 
 },
 // 開始拖拽的時候
 onStart: function (evt) {
  
 },
 onAdd: function (evt) {
  
 },
 onRemove: function (evt) {
 
 }
 })
 },
 initSortable1 () {
 var that = this
 var el = this.$el.querySelector('.left-table tbody')
 Sortable.create(el, {
 handle: '.ant-table-row',
 animation: 150,
 group: { name: 'name', pull: true, put: true },
 onUpdate: function (evt) {
 
 },
 // 開始拖拽的時候
 onStart: function (evt) {
  
 },
 onAdd: function (evt) {
  
 },
 onRemove: function (evt) {
 
 }
 })
 },
 }

關(guān)于handle所取的class,因為我們是要對antdesign表格的每一行進行拖拽,所以要選取到他每一行的class。

在這里插入圖片描述

至此兩個table之間就可以實現(xiàn)拖拽效果,但僅僅只是拖拽效果。
因為這樣拖拽之后,兩邊的數(shù)據(jù)源并沒有發(fā)生變化,而且明明已經(jīng)拖拽過來之后,另一邊的表格的展示頁會存在錯誤:

在這里插入圖片描述

排序是我右邊表格特有的,但是這邊的表格是不需要這個排序的,而且如果拖拽成功的話為什么還會顯示暫無數(shù)據(jù)呢,最后左邊表頭的CheckBox也無法選中。所以到此為止只是有拖拽效果而已。
2.在拖拽動作之后,把左右兩邊的數(shù)據(jù)源重新賦值,這里有兩種實現(xiàn)思路:

  • 每一次拖拽之后都去請求后臺數(shù)據(jù),拿到新的數(shù)據(jù)源之后重新賦值給表格,
  • 前端自己做好數(shù)據(jù)源的處理,等所有的拖拽結(jié)束之后排好序再給后臺保存。

考慮到性能消耗,我就選擇了第二種:
1)定義左右兩邊的數(shù)據(jù)源數(shù)組

data(){
 return{
 unMatchedList: [], // 左邊未匹配的數(shù)據(jù)
 dataList: [], // 右邊已匹配的數(shù)據(jù)
 pullIndex :'',//原數(shù)組拖拽元素的下標
 }
}

2)在每一次remove或者add的時候更新數(shù)據(jù)源,這里只寫了一個表格拖拽的方法,另一個只要把that.dataListthat.unMatchedList左右兩邊的數(shù)據(jù)源賦值調(diào)換一下就行,就不貼重復(fù)代碼了

 // 開始拖拽的時候
 onStart: function (evt) {
  that.pullIndex = evt.oldIndex
 },
 onAdd: function (evt) {
 //evt.newIndex 移入到新數(shù)組的下標
 //pullIndex 原數(shù)組拖拽元素的下標
  that.dataList.splice(evt.newIndex, 0, that.unMatchedList[that.pullIndex])
  that.dataList.forEach((item, index) => {
  item.sort = index + 1
  })
  //通知table視圖更新
  that.$nextTick(() => {
  that.$refs.table2 && this.$refs.table2.refresh(true)
 		 that.$refs.table && this.$refs.table.refresh(true)
  })
 },
 onRemove: function (evt) {
  that.dataList.splice(evt.oldIndex, 1)
  that.dataList.forEach((item, index) => {
  item.sort = index + 1
  })
  that.$nextTick(() => {
  that.$refs.table2 && this.$refs.table2.refresh(true)
 		that.$refs.table && this.$refs.table.refresh(true)
  })
 }
 })

3)實現(xiàn)同一個表格上下拖拽排序

initSortable () {
 var that = this
 var el = this.$el.querySelector('.sort-table tbody')
 Sortable.create(el, {
 handle: '.ant-table-row',
 animation: 150,
 group: { name: 'name', pull: true, put: true },
 //這里千萬不要用onEnd 方法
 onUpdate: function (evt) {
  var o = evt.oldIndex
  var n = evt.newIndex
  if (o === n) {
  return
  }
  that.sortListAndUpdate(that.dataList, o, n)
 },
 })
 },
 // 對數(shù)據(jù)進行排序,要求 o(oldIndex) 和 n(newIndex) 從 0開始
 sortList (list, o, n) {
 var newTableData = JSON.parse(JSON.stringify(list))
 var data = newTableData.splice(o, 1, null)
 newTableData.splice(o < n ? n + 1 : n, 0, data[0])
 newTableData.splice(o > n ? o + 1 : o, 1)
 return newTableData
 },
 /**
 * 對數(shù)據(jù)排序并更新 table, 要求 o(oldIndex) 和 n(newIndex) 從 0開始
 */
 sortListAndUpdate (list, o, n) {
 var newTableData = this.sortList(list, o, n)
 newTableData.forEach((item, index) => {
 item.sort = index + 1
 })
 this.$nextTick(() => {
 this.dataList = newTableData
 that.$refs.table2 && this.$refs.table2.refresh(true)
 })
 },

這邊我們選用onUpdate方法來排序,不要用onEnd方法,因為只要你有拖拽效果,都會去觸發(fā)onEnd方法,導(dǎo)致左右拖拽完后又會觸發(fā)一次排序。

到此這篇關(guān)于antdesign-vue結(jié)合sortablejs實現(xiàn)兩個table相互拖拽排序功能的文章就介紹到這了,更多相關(guān)antdesign-vue實現(xiàn)拖拽排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue-resourse將json數(shù)據(jù)輸出實例

    vue-resourse將json數(shù)據(jù)輸出實例

    這篇文章主要為大家詳細介紹了vue-resourse將json數(shù)據(jù)輸出實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Vue Render函數(shù)創(chuàng)建DOM節(jié)點代碼實例

    Vue Render函數(shù)創(chuàng)建DOM節(jié)點代碼實例

    這篇文章主要介紹了Vue Render函數(shù)創(chuàng)建DOM節(jié)點代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 基于Vue uniapp實現(xiàn)貪吃蛇游戲

    基于Vue uniapp實現(xiàn)貪吃蛇游戲

    貪吃蛇游戲想必是很多70、80后的回憶,一直到現(xiàn)在也深受大家的喜歡。本文將利用Vue+uniapp實現(xiàn)這一經(jīng)典的游戲,感興趣的可以了解一下
    2022-04-04
  • vue多個元素的樣式選擇器問題

    vue多個元素的樣式選擇器問題

    這篇文章主要介紹了vue多個元素的樣式選擇器問題,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • vue?cli?局部混入mixin和全局混入mixin的過程

    vue?cli?局部混入mixin和全局混入mixin的過程

    這篇文章主要介紹了vue?cli?局部混入mixin和全局混入mixin的過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue+iview實現(xiàn)手機號分段輸入框

    vue+iview實現(xiàn)手機號分段輸入框

    這篇文章主要為大家詳細介紹了vue+iview實現(xiàn)手機號分段輸入框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue3使用Element-plus的el-pagination分頁組件時無法顯示中文

    vue3使用Element-plus的el-pagination分頁組件時無法顯示中文

    本文主要介紹了vue3使用Element-plus的el-pagination分頁組件時無法顯示中文,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • vue.js移動端tab組件的封裝實踐實例

    vue.js移動端tab組件的封裝實踐實例

    本篇文章主要介紹了vue.js移動端tab的封裝實踐實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Vue3搭建組件庫開發(fā)環(huán)境的示例詳解

    Vue3搭建組件庫開發(fā)環(huán)境的示例詳解

    這篇文章給大家分享Vue3搭建組件庫開發(fā)環(huán)境,給大家講解依次搭建組件庫、example、文檔、cli,本文內(nèi)容是搭建組件庫的開發(fā)環(huán)境的過程,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • 使用vue-draggable-plus實現(xiàn)拖拽排序

    使用vue-draggable-plus實現(xiàn)拖拽排序

    最近遇到一個需求,在 Vue3 的一個 H5 頁面當中點擊拖拽圖標上下拖動 tab 子項,然后點擊保存可以保存最新的 tab 項順序,同事說可以用 vue-draggable-plus 這個庫來實現(xiàn)拖拽,所以本文給大家介紹了如何使用vue-draggable-plus實現(xiàn)拖拽排序,需要的朋友可以參考下
    2024-01-01

最新評論

通州区| 邻水| 灵丘县| 黔西县| 油尖旺区| 波密县| 乌鲁木齐市| 余庆县| 松滋市| 新沂市| 宝鸡市| 南和县| 黎川县| 徐水县| 宁阳县| 思茅市| 滨海县| 潍坊市| 邻水| 四川省| 桐乡市| 水城县| 乳源| 崇仁县| 筠连县| 宾川县| 兰州市| 行唐县| 武强县| 临城县| 都匀市| 靖江市| 本溪| 会宁县| 德令哈市| 淅川县| 建湖县| 周宁县| 治多县| 分宜县| 县级市|