Como passar um parâmetro para o manipulador de eventos Vue @click

101

Estou criando uma tabela usando Vue.js e quero definir um onClickevento para cada linha que passa contactID. Aqui está o código:

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

Ao clicar em uma linha, ele está chamando addToCount(), o que está funcionando. Eu quero passar item.contactIDpara addToCount(). Alguém poderia sugerir a sintaxe correta para isso?

user761100
fonte

Respostas:

121

Quando você está usando as diretivas do Vue, as expressões são avaliadas no contexto do Vue, então você não precisa embrulhar as coisas {}.

@clické apenas uma abreviação de v-on:clickdiretiva, portanto, as mesmas regras se aplicam.

No seu caso, basta usar @click="addToCount(item.contactID)"

Brian Glaz
fonte
2
E se o argumento que desejo passar não for iterado e programável, mas sim codificado como tal <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> e eu quiser usar o conteúdo de texto dos elementos a no método switchRoom?
Akin Hwan
1
@AkinHwan Se já estiver codificado, basta enviar o texto como parâmetro@click="switchRoom('Sky Room')"
Brian Glaz
E se não pertencer à instância vue. Por exemplo, você deseja substituir um clique no gráfico e o gráfico se enquadra em uma diretiva vue, mas não é ele mesmo vue. Você precisa chamar o evento de clique subjacente de alguma forma a partir da função de substituição de clique vue?
mathtick
136

Basta usar uma expressão Javascript normal, nada {}ou nada necessário:

@click="addToCount(item.contactID)"

se você também precisa do objeto de evento:

@click="addToCount(item.contactID, $event)"
Linus Borg
fonte
0

Eu tive o mesmo problema e aqui está como consigo passar:

No seu caso, você tem o addToCount()que é chamado. agora, para passar um parâmetro quando o usuário clicar, você pode dizer@click="addToCount(item.contactID)"

na implementação de sua função, você pode receber os parâmetros como:

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!

}
fotiecodes
fonte
Obrigado. Sua resposta é semelhante à já fornecida por @Linus
user761100