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