Komponen Vue (Vue.js 2.0) atau arahan (Vue.js 1.0) memungkinkan drag-and-drop dan sinkronisasi dengan array model tampilan.
Berdasarkan dan menawarkan semua fitur Sortable.js
Lihat vue.draggable.next
https://sortablejs.github.io/Vue.Draggable/
https://david-desmaisons.github.io/draggable-example/
tag
dan props componentData
Mencari pendukung!
Apakah proyek ini bermanfaat? Anda dapat membelikan saya ☕ atau ?
yarn add vuedraggable
npm i -S vuedraggable
Berhati-hatilah karena ini vuedraggable untuk Vue 2.0 dan bukan vue-draggable untuk versi 1.0
< script src =" //cdnjs.cloudflare.com/ajax/libs/vue/2.5.2/vue.min.js " > script >
< script src =" //cdn.jsdelivr.net/npm/[email protected]/Sortable.min.js " > script >
< script src =" //cdnjs.cloudflare.com/ajax/libs/Vue.Draggable/2.20.0/vuedraggable.umd.min.js " > script >
lih bagian contoh
Gunakan komponen yang dapat diseret:
< draggable v-model =" myArray " group =" people " @start =" drag=true " @end =" drag=false " >
< div v-for =" element in myArray " :key =" element.id " > {{element.name}} div >
draggable >
berkas .vue:
import draggable from 'vuedraggable'
. . .
export default {
components : {
draggable ,
} ,
...
transition-group
: < draggable v-model =" myArray " >
< transition-group >
< div v-for =" element in myArray " :key =" element.id " >
{{element.name}}
div >
transition-group >
draggable >
Komponen yang dapat diseret harus langsung membungkus elemen yang dapat diseret, atau transition-component
yang berisi elemen yang dapat diseret.
< draggable v-model =" myArray " draggable =" .item " >
< div v-for =" element in myArray " :key =" element.id " class =" item " >
{{element.name}}
div >
< button slot =" footer " @click =" addPeople " > Add button >
draggable >
< draggable v-model =" myArray " draggable =" .item " >
< div v-for =" element in myArray " :key =" element.id " class =" item " >
{{element.name}}
div >
< button slot =" header " @click =" addPeople " > Add button >
draggable >
< draggable v-model =' myList ' >
computed: {
myList : {
get ( ) {
return this . $store . state . myList
} ,
set ( value ) {
this . $store . commit ( 'updateList' , value )
}
}
}
Jenis: Array
Diperlukan: false
Bawaan: null
Masukkan array ke komponen yang dapat diseret. Biasanya array yang sama seperti yang direferensikan oleh direktif v-for elemen dalam.
Ini adalah cara yang lebih disukai untuk menggunakan Vue.draggable karena kompatibel dengan Vuex.
Ini tidak boleh digunakan secara langsung tetapi hanya melalui arahan v-model
:
< draggable v-model =" myArray " >
Jenis: Array
Diperlukan: false
Bawaan: null
Alternatif untuk prop value
, daftar adalah array yang akan disinkronkan dengan drag-and-drop.
Perbedaan utamanya adalah list
prop diperbarui oleh komponen yang dapat diseret menggunakan metode splice, sedangkan value
tidak dapat diubah.
Jangan gunakan bersamaan dengan prop nilai.
Baru di versi 2.19
Opsi yang dapat diurutkan dapat diatur secara langsung sebagai props vue.draggable sejak versi 2.19.
Ini berarti bahwa semua opsi sortable adalah props sortable yang valid dengan pengecualian semua metode yang dimulai dengan "on" karena komponen yang dapat diseret mengekspos API yang sama melalui peristiwa.
properti kebab-case didukung: misalnya props ghost-class
akan dikonversi ke opsi sortir ghostClass
.
Contoh pengaturan pegangan, pengurutan, dan opsi grup:
< draggable
v-model =" list "
handle =" .handle "
:group =" { name: 'people', pull: 'clone', put: false } "
ghost-class =" ghost "
:sort =" false "
@change =" log "
>
draggable >
Jenis: String
Bawaan: 'div'
Jenis node HTML dari elemen yang dibuat oleh komponen yang dapat diseret sebagai elemen luar untuk slot yang disertakan.
Dimungkinkan juga untuk meneruskan nama komponen vue sebagai elemen. Dalam hal ini, atribut draggable akan diteruskan ke komponen create.
Lihat juga ComponentData jika Anda perlu menyetel props atau event ke komponen yang dibuat.
Jenis: Function
Diperlukan: false
Bawaan: (original) => { return original;}
Fungsi memanggil komponen sumber untuk mengkloning elemen ketika opsi kloning benar. Argumen uniknya adalah elemen viewModel yang akan dikloning dan nilai yang dikembalikan adalah versi kloningnya.
Secara default, vue.draggable menggunakan kembali elemen viewModel, jadi Anda harus menggunakan hook ini jika ingin mengkloning atau mengkloningnya secara mendalam.
Jenis: Function
Diperlukan: false
Bawaan: null
Jika bukan null, fungsi ini akan dipanggil dengan cara yang sama seperti panggilan balik Sortable onMove. Mengembalikan false akan membatalkan operasi drag.
function onMoveCallback ( evt , originalEvent ) {
...
// return false; — for cancel
}
Objek evt memiliki properti yang sama dengan acara Sortable onMove, dan 3 properti tambahan:
draggedContext
: konteks yang ditautkan ke elemen yang diseretindex
: indeks elemen yang diseretelement
: elemen yang diseret yang mendasari elemen model tampilanfutureIndex
: indeks potensial elemen yang diseret jika operasi pelepasan diterimarelatedContext
: konteks yang ditautkan ke operasi drag saat iniindex
: indeks elemen targetelement
: elemen target melihat elemen modellist
: daftar sasarancomponent
: target VueComponentHTML:
< draggable :list =" list " :move =" checkMove " >
javascript:
checkMove: function ( evt ) {
return ( evt . draggedContext . element . name !== 'apple' ) ;
}
Lihat contoh lengkap: Cancel.html, cancel.js
Jenis: Object
Diperlukan: false
Bawaan: null
Props ini digunakan untuk meneruskan informasi tambahan ke komponen anak yang dideklarasikan oleh tag props.
Nilai:
props
: props untuk diteruskan ke komponen anakattrs
: attrs untuk diteruskan ke komponen anakon
: acara yang akan dilanggani di komponen anakContoh (menggunakan elemen perpustakaan UI):
< draggable tag =" el-collapse " :list =" list " :component-data =" getComponentData() " >
< el-collapse-item v-for =" e in list " :title =" e.title " :name =" e.name " :key =" e.name " >
< div > {{e.description}} div >
el-collapse-item >
draggable >
methods: {
handleChange ( ) {
console . log ( 'changed' ) ;
} ,
inputChanged ( value ) {
this . activeNames = value ;
} ,
getComponentData ( ) {
return {
on : {
change : this . handleChange ,
input : this . inputChanged
} ,
attrs : {
wrap : true
} ,
props : {
value : this . activeNames
}
} ;
}
}
Dukungan untuk acara yang Dapat Diurutkan:
start
, add
, remove
, update
, end
, choose
, unchoose
, sort
, filter
, clone
Peristiwa dipanggil setiap kali onStart, onAdd, onRemove, onUpdate, onEnd, onChoose, onUnchoose, onSort, onClone diaktifkan oleh Sortable.js dengan argumen yang sama.
Lihat di sini untuk referensi
Perhatikan bahwa panggilan balik SortableJS OnMove dipetakan dengan prop move
HTML:
< draggable :list =" list " @end =" onEnd " >
mengubah acara
acara change
dipicu ketika prop daftar bukan nol dan larik terkait diubah karena operasi drag-and-drop.
Peristiwa ini dipanggil dengan satu argumen yang berisi salah satu properti berikut:
added
: berisi informasi elemen yang ditambahkan ke arraynewIndex
: indeks elemen yang ditambahkanelement
: elemen yang ditambahkanremoved
: berisi informasi elemen yang dihapus dari arrayoldIndex
: indeks elemen sebelum dihapuselement
: elemen yang dihapusmoved
: berisi informasi elemen yang dipindahkan dalam arraynewIndex
: indeks elemen yang dipindahkan saat inioldIndex
: indeks lama dari elemen yang dipindahkanelement
: elemen yang dipindahkanBatasan: slot header atau footer tidak berfungsi bersama dengan grup transisi.
Gunakan slot header
untuk menambahkan elemen yang tidak dapat diseret ke dalam komponen vuedraggable. Penting: ini harus digunakan bersama dengan opsi yang dapat diseret untuk menandai elemen yang dapat diseret. Perhatikan bahwa slot header akan selalu ditambahkan sebelum slot default terlepas posisinya di template. Mantan:
< draggable v-model =" myArray " draggable =" .item " >
< div v-for =" element in myArray " :key =" element.id " class =" item " >
{{element.name}}
div >
< button slot =" header " @click =" addPeople " > Add button >
draggable >
Gunakan slot footer
untuk menambahkan elemen yang tidak dapat diseret ke dalam komponen vuedraggable. Penting: ini harus digunakan bersama dengan opsi yang dapat diseret untuk menandai elemen yang dapat diseret. Perhatikan bahwa slot footer akan selalu ditambahkan setelah slot default, apa pun posisinya di templat. Mantan:
< draggable v-model =" myArray " draggable =" .item " >
< div v-for =" element in myArray " :key =" element.id " class =" item " >
{{element.name}}
div >
< button slot =" footer " @click =" addPeople " > Add button >
draggable >
Turunan Vue.draggable harus selalu memetakan daftar atau prop nilai menggunakan direktif v-for
Elemen turunan di dalam v-for harus dikunci seperti elemen apa pun di Vue.js. Berhati-hatilah dalam memberikan nilai-nilai kunci yang relevan khususnya:
contoh yang dapat diseret
Lihat di sini