<div v-for="(grp,idx) in vm"> <button onclick="addPlant(idx)"> ....... </button> </div> addPlant() is a javascript function and not a VueJS method. How can I pass the idx value to the javascript method now?
3 Réponses :
Vous ne pouvez pas référencer les variables de modèle Vue à partir d'un gestionnaire onclick
javascript vanille comme vous essayez de le faire.
Vous devez passer la valeur d'index à un gestionnaire Vue @click
et appeler la méthode javascript vanilla à partir de là:
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <div v-for="(grp, idx) in groups"> <button @click="onButtonClick(idx)"> {{ idx }} </button> </div> </div>
function addPlant(idx) { alert(idx) } new Vue({ el: '#app', data() { return { groups: ['a', 'b', 'c'] } }, methods: { onButtonClick(idx) { addPlant(idx) } } })
Créez une méthode Vue appelant la fonction javascript
<div v-for="(grp,idx) in vm"> <button v-on:click="callAddPlant(idx)"> ....... </button> </div>
...
methods: { callAddPlant: function(idx) { addPlant(idx) } }
Si nous nous limitons à votre cas d'utilisation spécifique, nous pourrions attribuer index
à l'attribut data-label
(qui est lié à index )
et passez this.getAttribute ('data-label')
comme paramètre, this
fait référence à l'élément Html et non à l'instance ou au composant Vue :
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <div v-for="(bar,idx) in bars"> <button :data-label="idx" onclick="addPlant(this.getAttribute('data-label'))"> {{bar}} </button> </div> </div>
new Vue({ el: '#app', data(){ return{ bars:['a','b','c'] } } }) function addPlant(index){ console.log("# "+index) }