如何在@click 事件中获取组件实例?

Posted

技术标签:

【中文标题】如何在@click 事件中获取组件实例?【英文标题】:how to get the component instance within an @click event? 【发布时间】:2018-01-28 09:57:48 【问题描述】:

我在 Vue 组件中有一个按钮

<el-button class='range-right' @click='deleteItem(item)'>delete</el-button>

在它的处理程序中,我想调用组件的其他方法。 然而,即使我可以调用 deleteItem 这本身就是一个组件方法,我也无法获取其他方法的实际组件。

有没有办法将 $component 参数传递给 @click 事件?

methods 
  deleteItem: (item, obj) => 
    let api = '/api/train/deleteItem?_id=' + item._id
    let resource = Vue.resource(api)
    let vm = this  // NOT a component
    window.delItem = this
    console.log('deleteItem.this', this)
    resource.delete(api)
    .then(items => 
      console.log('deleted')
      vm.methods.load() //<< fails
    )
  ,

【问题讨论】:

VueJS: why is "this" undefined?的可能重复 永远不要用箭头函数定义 Vue 方法。 是的,箭头功能谢谢! 【参考方案1】:

我认为问题出在注释中的箭头函数

在此处查看使用function 的示例:

https://jsfiddle.net/rvp6fvwp/

箭头函数绑定到父上下文,如此处所述https://vuejs.org/v2/guide/instance.html#Properties-and-Methods

不要在实例属性或回调上使用箭头函数(例如 vm.$watch('a', newVal =&gt; this.myMethod()))。由于箭头函数是 绑定到父上下文,这不会是 Vue 实例 你会想到 this.myMethod 将是未定义的。

【讨论】:

是的,就是这样。一个小小的 vue 陷阱!如果工具为此提供某种类型的警告可能会很好。

以上是关于如何在@click 事件中获取组件实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何在特定事件之后渲染/创建 Vue 组件(例如 @click @change)

Vue JS - 如何在父组件中获取道具值

如何在运行时创建的 MFC 中获取 Treeview(CTreeCtrl) 的 Click 事件?

vue父组件点击触发子组件事件的实例讲解

flash as3如何获取实例名字中的数字

如何在 React 子组件中设置事件处理程序