Olay ve argümanı Vue.js'de v-on'a geçirmek


158

v-on:inputDirektiflerde bir parametre iletiyorum. Bunu geçemezsem, olaya yöntemden erişebilirim. Parametreyi işleve geçirirken olaya hala erişebileceğim bir yol var mı? Vue-router kullanıyorum değil:

Bu parametreyi geçmeden. Olay nesnesine erişebilirim

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)
    }
  }

Bu parametreyi geçerken olur. Etkinlik nesnesine erişemiyorum

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)
    }
  }

İşte kodun snippet'i, yaşadığım sorunu çoğaltmak için yeterince iyi olmalı

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

Yanıtlar:


241

Siz de veri geçerken erişim olay nesnesine istiyorsanız, geçmek zorunda eventve ticket.idaşağıdaki gibi parametreler, hem:

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)
  }
}

Bkz. Çalışan keman: https://jsfiddle.net/nee5nszL/

Düzenlendi: vue-router ile durum

Vue-router kullanıyorsanız , yönteminizde aşağıdaki gibi $ olayını kullanmanız gerekebilir v-on:input:

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

İşte keman çalışıyor .


10
Denedim ama hata mesajı alıyorumProperty 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

Eğer HTML olay geçti @geckob: v-on:input?
— Saurabh

Bunun ilgili olup olmadığından emin değilim, ancak vue-yönlendirici kullanıyorum ve bu kısmi birinde oluyor
— geckob

7
@Saurabh @geckob Hatayı önlemek için, özel $eventdeğişkeni yöntem çağrısına v-on:input="addToCart($event, num)"
— geçirmeniz gerekir

2
Sen geçmelidir $eventdeğilevent
— Michael Tranchida

20

Bunun gibi bir şey de yapabilirsiniz ...

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

Evan Bu tekniği Vue forumunda bir yazıda tavsiye ettin. Genel olarak bazı olaylar birden fazla argüman çıkarabilir. Ayrıca belgelerin belirttiği gibi dahili değişken $ olayı orijinal DOM olayını geçmek içindir.


jsfiddle.net/50wL7mdz/30115 * .vue bileşenleri kullanılırken forma sözdiziminin aktarılacağını, ancak tarayıcı içi derleme kullanıyorsanız aktarılacağını unutmayın.
— Илья Зеленько

2
"... argümanlar" ve "$ event" arasında bir fark var mı?
— Raphael

@Raphael Bir fark var! "$ Event" bağımsız değişkeniyle etkinlikten yalnızca bir bağımsız değişken iletirsiniz.
— Piotr Dawidiuk

6

Hangi argümanları geçmeniz gerektiğine bağlı olarak, özellikle özel olay işleyicileri için, şöyle bir şey yapabilirsiniz:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.