我试图让拖放函数在vue.js应用程序中使用vue-draggable https://vuejsexamples.com/vuejs-drag-and-drop-library-without-any-dependency/,库中几乎没有你能听到的事件,我想在项目被删除后执行一些逻辑。但是,我无法访问vue组件'this‘以及数据和方法。我尝试过使用this.$dispatch('symDragged', event);,但它并不是出于同样的原因而起作用的。“这”不是vue实例,而是可拖放元素的实例。
以下是代码:
export default {
components: {
ICol,
SymptomsChooser, MultiSelectEditor, TempPressureChooser, BodyPartsEditor, MandatorySymptomsChooser},
data() {
return {
// data ommited...
options: {
dropzoneSelector: 'ul',
draggableSelector: 'li',
excludeOlderBrowsers: true,
showDropzoneAreas: true,
multipleDropzonesItemsDraggingEnabled: true,
onDrop(event) {
// delete symptom from old basket and add it to new one
let oldBasket = event.owner.accessKey;
let newBasket = event.droptarget.accessKey;
//this is not working
//this.symDragged(this.draggedSymId, oldBasket, newBasket);
},
onDragstart(event) {
this.draggedSymId = event.items[0].accessKey;
}
}
}
},
methods: {
symDragged(symId, oldBasketId, newBasketId) {
console.log("symDragged!");
let draggedSym = this.getSymById(symId);
let basketOld = this.getBasketById(oldBasketId);
this.delSym(basketOld, draggedSym);
this.addSym({baskedId: newBaskedId, sym: draggedSym});
}
//other methods ommited
}}
那么,从回调事件调用vue组件方法的正确方法是什么?或者我需要创建另一个事件,这样vue实例才能侦听它?
谢谢你的帮助!
发布于 2019-01-01 14:21:29
您面临的问题是,在使用this时,您引用的是返回的数据对象范围,而不是组件范围。解决这个问题的最好方法是对组件实例进行引用,因此稍后您可以调用附加到该实例的任何内容。您还可以查看代码框示例https://codesandbox.io/embed/7kykmmmznq。
data() {
const componentInstance = this;
return {
onDrop() {
let oldBasket = event.owner.accessKey;
let newBasket = event.droptarget.accessKey;
let draggedItemsAccessKeys = event.items.map(element => element.accessKey);
componentInstance.symDragged(
draggedItemsAccessKeys,
oldBasket,
newBasket
);
}
}
}https://stackoverflow.com/questions/53995850
复制相似问题