Diciamo che ho un'istanza principale di Vue con componenti figlio. Esiste un modo per chiamare un metodo appartenente a uno di questi componenti al di fuori dell'istanza di Vue?
Ecco un esempio:
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>
Quindi, quando faccio clic sul pulsante interno, il increaseCount()
metodo è associato all'evento click, quindi viene chiamato. Non c'è modo di associare l'evento al pulsante esterno, il cui evento click sto ascoltando con jQuery, quindi avrò bisogno di un altro modo per chiamare increaseCount
.
MODIFICARE
Sembra che funzioni:
vm.$children[0].increaseCount();
Tuttavia, questa non è una buona soluzione perché sto facendo riferimento al componente tramite il suo indice nell'array figlio e con molti componenti è improbabile che rimanga costante e che il codice sia meno leggibile.