日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

這篇文章主要介紹了vue element el-transfer增加拖拽功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

芯資管項目要求el-transfer增加拖拽排序,左右上下互相拖拽功能;

原來的組件不支持拖拽,這里要用個第三方脫宅組件sortablejs

首先安裝

sudo npm i sortablejs --save-dev

html代碼

<template>
    <el-transfer ref="transfer" id="transfer" v-model="value" :data="data">
        <span slot-scope="{ option }" :draggable="!option.disabled" @dragstart="drag($event,option)">{{ option.key }} - {{ option.label }}</span>
    </el-transfer>
</template>

create

<script>
import Sortable from 'sortablejs'
export default {
    data() {
        const generateData = _ => {
            const data = []; for (let i = 1; i <= 15; i++) {
                data.push({
                    key: i,
                    label: `備選項 ${i}`,
                    disabled: i % 4 === 0 
                });
            } return data;
        }; return {
            data: generateData(),
            value: [1, 4],
            draggingKey : null 
        }
    },
    mounted() {
        const transfer = this.$refs.transfer.$el
        const leftPanel = transfer.getElementsByClassName("el-transfer-panel")[0].getElementsByClassName("el-transfer-panel__body")[0];
        const rightPanel = transfer.getElementsByClassName("el-transfer-panel")[1].getElementsByClassName("el-transfer-panel__body")[0];
        const rightEl = rightPanel.getElementsByClassName("el-transfer-panel__list")[0]
        Sortable.create(rightEl,{
            onEnd: (evt) => {
                const {oldIndex,newIndex} = evt;
                const temp = this.value[oldIndex] 
                if (!temp || temp === 'undefined') {
                    return
                }// 解決右邊最后一項從右邊拖左邊,有undefined的問題
                this.$set(this.value,oldIndex,this.value[newIndex])  
                this.$set(this.value,newIndex,temp)
            }
        })
        const leftEl = leftPanel.getElementsByClassName("el-transfer-panel__list")[0]
        Sortable.create(leftEl,{
            onEnd: (evt) => {
                const {oldIndex,newIndex} = evt;
                const temp = this.data[oldIndex] 
                if (!temp || temp === 'undefined') {
                    return
                } // 解決右邊最后一項從右邊拖左邊,有undefined的問題
                this.$set(this.data,oldIndex,this.data[newIndex]) 
                this.$set(this.data,newIndex,temp)
            }
        })
        leftPanel.ondragover = (ev) => {
            ev.preventDefault()
        }
        leftPanel.ondrop = (ev) => {
            ev.preventDefault();
            const index = this.value.indexOf(this.draggingKey) if(index !== -1){ 
                this.value.splice(index,1)
            }
        }
        rightPanel.ondragover = (ev) => {
            ev.preventDefault()
        }
        rightPanel.ondrop = (ev) => {
            ev.preventDefault();  if(this.value.indexOf(this.draggingKey) === -1){
                this.value.push(this.draggingKey)
            }
        }
    },
    methods: {
        drag(ev,option) { 
            this.draggingKey = option.key
        }
    }
}
</script>

到此這篇關于vue element el-transfer增加拖拽功能的文章就介紹到這了。


分享到:
標簽:vue element el-transfer 拖拽功能
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定