Übergeben von Ereignis und Argument an v-on in Vue.js.


158

Ich übergebe einen Parameter in v-on:inputDirektiven. Wenn ich es nicht übergebe, kann ich in der Methode auf das Ereignis zugreifen. Kann ich trotzdem auf das Ereignis zugreifen, wenn ich den Parameter an die Funktion übergebe? Nicht dass ich einen Vue-Router benutze:

Dies ist ohne Übergabe des Parameters. Ich kann auf das Ereignisobjekt zugreifen

HTML

<input type="number" v-on:input="addToCart" min="0" placeholder="0">

Javascript

  methods: {
    addToCart: function (event) {

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

Dies ist beim Übergeben des Parameters. Ich kann nicht auf das Ereignisobjekt zugreifen

HTML

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

Javascript

  methods: {
    addToCart: function (id) {

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

Hier ist ein Ausschnitt aus dem Code, der gut genug sein sollte, um das Problem zu replizieren, das ich habe

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

Antworten:


241

Wenn Sie auch den Zugriff auf Ereignisobjekt wollen als Daten übergeben, müssen Sie passieren eventund ticket.idsowohl als Parameter, wie folgt vor :

HTML

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

Javascript

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

Siehe Arbeitsgeige: https://jsfiddle.net/nee5nszL/

Bearbeitet: Fall mit Vue-Router

Wenn Sie einen Vue-Router verwenden, müssen Sie in Ihrer Methode möglicherweise $ eventv-on:input wie folgt verwenden:

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

Hier arbeitet Geige .


10
Ich habe es versucht, aber ich bekomme die FehlermeldungProperty or method "event" is not defined on the instance but referenced during render. Make sure to declare reactive data properties in the data option
Geckob

@geckob Sie haben das Ereignis aus HTML übergeben : v-on:input?
Saurabh

Ich bin mir nicht sicher, ob dies verwandt ist oder nicht, aber ich benutze einen
Vue

7
@ Saurabh @geckob Um den Fehler zu vermeiden, müssen Sie die spezielle $eventVariable an den Methodenaufruf übergebenv-on:input="addToCart($event, num)"
williamukoh

2
Sie sollten passieren $event, nichtevent
Michael Tranchida

20

Sie können auch so etwas tun ...

<input @input="myHandler('foo', 'bar', ...arguments)">

Evan Sie selbst haben diese Technik in einem Beitrag im Vue-Forum empfohlen. Im Allgemeinen können einige Ereignisse mehr als ein Argument ausgeben. Wie in der Dokumentation angegeben, ist die interne Variable $ event zum Übergeben des ursprünglichen DOM-Ereignisses vorgesehen.


jsfiddle.net/50wL7mdz/30115 Beachten Sie, dass die Spread-Syntax bei Verwendung von * .vue-Komponenten transpiliert wird, jedoch nicht, wenn Sie die Kompilierung im Browser verwenden.
Злья Зеленько

2
Gibt es einen Unterschied zwischen "... Argumenten" und "$ Ereignis"?
Raphael

@ Raphael Es gibt einen Unterschied! Mit dem Argument "$ event" übergeben Sie nur ein Argument aus dem Ereignis.
Piotr Dawidiuk

6

Abhängig davon, welche Argumente Sie übergeben müssen, insbesondere für benutzerdefinierte Ereignishandler, können Sie Folgendes tun:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.