Angenommen, ich habe eine Haupt-Vue-Instanz mit untergeordneten Komponenten. Gibt es eine Möglichkeit, eine Methode, die zu einer dieser Komponenten gehört, vollständig von außerhalb der Vue-Instanz aufzurufen?
Hier ist ein Beispiel:
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>
Wenn ich also auf die interne Schaltfläche klicke, ist die increaseCount()
Methode an ihr Klickereignis gebunden, sodass sie aufgerufen wird. Es gibt keine Möglichkeit, das Ereignis an die externe Schaltfläche zu binden, deren Klickereignis ich mit jQuery abhöre. Daher benötige ich eine andere Möglichkeit zum Aufrufen increaseCount
.
BEARBEITEN
Es scheint, dass dies funktioniert:
vm.$children[0].increaseCount();
Dies ist jedoch keine gute Lösung, da ich die Komponente anhand ihres Index im untergeordneten Array referenziere. Bei vielen Komponenten ist es unwahrscheinlich, dass dies konstant bleibt und der Code weniger lesbar ist.