Disons que j'ai une instance principale de Vue qui a des composants enfants. Existe-t-il un moyen d'appeler une méthode appartenant à l'un de ces composants depuis l'extérieur de l'instance de Vue?
Voici un exemple:
var vm = new Vue({
el: '#app',
components: {
'my-component': {
template: '#my-template',
data: function() {
return {
count: 1,
};
},
methods: {
increaseCount: function() {
this.count++;
}
}
},
}
});
$('#external-button').click(function()
{
vm['my-component'].increaseCount(); // This doesn't work
});
<script src="http://vuejs.org/js/vue.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="app">
<my-component></my-component>
<br>
<button id="external-button">External Button</button>
</div>
<template id="my-template">
<div style="border: 1px solid; padding: 5px;">
<p>A counter: {{ count }}</p>
<button @click="increaseCount">Internal Button</button>
</div>
</template>
Ainsi, lorsque je clique sur le bouton interne, la increaseCount()méthode est liée à son événement click, elle est donc appelée. Il n'y a aucun moyen de lier l'événement au bouton externe, dont j'écoute l'événement click avec jQuery, j'ai donc besoin d'une autre façon d'appeler increaseCount.
ÉDITER
Il semble que cela fonctionne:
vm.$children[0].increaseCount();
Cependant, ce n'est pas une bonne solution car je fais référence au composant par son index dans le tableau des enfants, et avec de nombreux composants, il est peu probable qu'il reste constant et le code est moins lisible.