117 votes

Comment passer un paramètre au gestionnaire d'événement @click de Vue ?

Je suis en train de créer un tableau en utilisant Vue.js et je veux définir un fichier de type onClick pour chaque ligne qui passe contactID . Voici le code :

<tr v-for="item in items" class="static" 
    v-bind:class="{'evenRow': item.oddeven=='1', 'oddRow': item.oddeven=='0' }"
@click="addToCount('{item.contactID}')"
>
    <td>{{item.contactName}}</td>
    <td>{{item.recipient}}</td>
</tr>   

En cliquant sur une ligne, il appelle addToCount() qui fonctionne. Je veux passer item.contactID a addToCount() . Quelqu'un peut-il suggérer la syntaxe correcte pour cela ?

152voto

Linus Borg Points 9887

Il suffit d'utiliser une expression Javascript normale, sans {} ou tout ce qui est nécessaire :

@click="addToCount(item.contactID)"

si vous avez également besoin de l'objet événement :

@click="addToCount(item.contactID, $event)"

145voto

Brian Glaz Points 5833

Lorsque vous utilisez des directives Vue, les expressions sont évaluées dans le contexte de Vue, et il n'est donc pas nécessaire d'envelopper les choses dans des directives de type {} .

@click est juste un raccourci pour v-on:click donc les mêmes règles s'appliquent.

Dans votre cas, il suffit d'utiliser @click="addToCount(item.contactID)"

2 votes

Que se passe-t-il si l'argument que je veux passer n'est pas itéré et modifiable mais plutôt codé en dur comme suit <a href="#" @click="switchRoom" class="rooms">Interview Room</a> <a href="#" @click="switchRoom" class="rooms">Green Room</a> <a href="#" @click="switchRoom" class="rooms">Bavarian Caviar Room</a> <a href="#" @click="switchRoom" class="rooms">Sky Room</a> et je voulais utiliser le contenu textuel des éléments a dans la méthode switchRoom ?

1 votes

@AkinHwan Si c'est déjà codé en dur, envoyez simplement le texte en tant que paramètre. @click="switchRoom('Sky Room')"

0 votes

Et s'il n'appartient pas à l'instance Vue ? Par exemple, vous voulez passer outre le clic d'un graphique et le graphique se trouve dans une directive Vue mais n'est pas lui-même Vue. Vous devez appeler l'événement de clic sous-jacent d'une manière ou d'une autre à partir de la fonction "override vue click" ?

0voto

fotiecodes Points 101

J'ai eu le même problème et voici comment j'ai réussi à passer :

Dans votre cas, vous avez addToCount() qui est appelé. Maintenant, pour transmettre un paramètre lorsque l'utilisateur clique, vous pouvez dire @click="addToCount(item.contactID)"

dans l'implémentation de votre fonction vous pouvez recevoir les paramètres comme :

addToCount(paramContactID){
 // the paramContactID contains the value you passed into the function when you called it
 // you can do what you want to do with the paramContactID in here!

}

0 votes

Merci. Votre réponse est similaire à celle déjà fournie par @Linus

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X