首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从VueDraggable事件内部调用vue方法

从VueDraggable事件内部调用vue方法
EN

Stack Overflow用户
提问于 2019-01-01 13:31:33
回答 1查看 1.1K关注 0票数 0

我试图让拖放函数在vue.js应用程序中使用vue-draggable https://vuejsexamples.com/vuejs-drag-and-drop-library-without-any-dependency/,库中几乎没有你能听到的事件,我想在项目被删除后执行一些逻辑。但是,我无法访问vue组件'this‘以及数据和方法。我尝试过使用this.$dispatch('symDragged', event);,但它并不是出于同样的原因而起作用的。“这”不是vue实例,而是可拖放元素的实例。

以下是代码:

代码语言:javascript
复制
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实例才能侦听它?

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-01 14:21:29

您面临的问题是,在使用this时,您引用的是返回的数据对象范围,而不是组件范围。解决这个问题的最好方法是对组件实例进行引用,因此稍后您可以调用附加到该实例的任何内容。您还可以查看代码框示例https://codesandbox.io/embed/7kykmmmznq

代码语言:javascript
复制
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
      );
    }

  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53995850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档