在Vue.js中将事件和参数传递给v-on

gec*_*kob 119 vue.js

我在v-on:input指令中传递一个参数.如果我没有通过它,我可以在方法中访问该事件.有什么办法可以在将参数传递给函数时仍然可以访问该事件.不是我使用vue-router:

这是没有传递参数.我可以访问事件对象

HTML

<input type="number" v-on:input="addToCart" min="0" placeholder="0">
Run Code Online (Sandbox Code Playgroud)

使用Javascript

  methods: {
    addToCart: function (event) {

      // I need to access the element by using event.target
      console.log('In addToCart')
      console.log(event.target)
    }
  }
Run Code Online (Sandbox Code Playgroud)

这是在传递参数时.我无法访问事件对象

HTML

<input type="number" v-on:input="addToCart(ticket.id)" min="0" placeholder="0">
Run Code Online (Sandbox Code Playgroud)

使用Javascript

  methods: {
    addToCart: function (id) {

      // How can I access the element by using event
      console.log('In addToCart')
      console.log(id)
    }
  }
Run Code Online (Sandbox Code Playgroud)

这里有一些代码片段,应该足以复制我遇到的问题

https://jsfiddle.net/lookman/vdhwkrmq/

Sau*_*abh 189

如果您要访问事件对象以及传递的数据,你必须通过eventticket.id既作为参数,如下列:

HTML

<input type="number" v-on:input="addToCart($event, ticket.id)" min="0" placeholder="0">
Run Code Online (Sandbox Code Playgroud)

使用Javascript

methods: {
  addToCart: function (event, id) {
    // use event here as well as id
    console.log('In addToCart')
    console.log(id)
  }
}
Run Code Online (Sandbox Code Playgroud)

看工作小提琴:https://jsfiddle.net/nee5nszL/

编辑:vue-router案例

如果您使用的是vue-router,则可能必须 在方法中使用$ event,v-on:input如下所示:

<input type="number" v-on:input="addToCart($event, num)" min="0" placeholder="0">
Run Code Online (Sandbox Code Playgroud)

这是工作小提琴.

  • 我试过,但是我收到错误消息`属性或方法"事件"未在实例上定义,但在渲染期间引用.确保在data选项中声明了反应数据属性 (9认同)
  • @Saurabh @geckob为了避免错误,你需要将特殊的`$ event`变量传递给方法调用`v-on:input ="addToCart($ event,num)"` (7认同)
  • 你应该传递`$ event`,而不是`event` (2认同)

jas*_*unk 13

根据您需要传递的参数,特别是对于自定义事件处理程序,您可以执行以下操作:

<div @customEvent='(arg1) => myCallback(arg1, arg2)'>Hello!</div>

  • +1 [始终使用短横线命名的事件名称](https://vuejs.org/v2/guide/components-custom-events.html#Event-Names) (3认同)

xpu*_*puu 12

您也可以做这样的事情...

<input @input="myHandler('foo', 'bar', ...arguments)">
Run Code Online (Sandbox Code Playgroud)

Evan You本人在Vue论坛上的一篇文章中推荐了这种技术。通常,某些事件可能会发出多个参数。此外,正如文档所述,内部变量$ event用于传递原始DOM事件。

  • https://jsfiddle.net/50wL7mdz/30115/ 请注意,使用 *.vue 组件时,扩展语法将被转换,但如果使用浏览器内编译则不会。 (2认同)
  • “ ... arguments”和“ $ event”之间有区别吗? (2认同)
  • @Raphael 有区别!使用“$event”参数,您仅传递事件中的一个参数。 (2认同)

MD *_*YON 11

我喜欢这种传递参数的方式,因为我们可以使用匿名回调函数传递事件和参数。

<button v-on:click="(e)=>deleteHandler(e, args1)" > Click me </button>
Run Code Online (Sandbox Code Playgroud)