Rufen Sie einen Vue.js "Komponenten" - Methode, die von außerhalb der Komponente
Sagen wir, ich habe ein Haupt-Vue Instanz, die untergeordneten Komponenten. Gibt es eine Möglichkeit den Aufruf einer Methode die Zugehörigkeit zu einer dieser Komponenten aus, die außerhalb des Vue Instanz vollständig?
Hier ist ein Beispiel:
JS:
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
});
HTML:
<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>
Also wenn ich auf die interne Schaltfläche, die increaseCount()
Methode gebunden ist das click-Ereignis, so wird es genannt. Es gibt keine Möglichkeit, binden Sie das Ereignis an die externe Taste, deren click-Ereignis bin ich beim hören mit jQuery, so werde ich brauchen, einen anderen Weg zu nennen increaseCount
.
BEARBEITEN
Scheint es, das funktioniert:
vm.$children[0].increaseCount();
Dies ist jedoch keine gute Lösung, da bin ich verweisen auf die Komponente, indem Sie den index in das Kinder-array, und mit vielen Komponenten dies ist unwahrscheinlich, bleiben konstant, und der code ist schlechter lesbar.
- Ich fügte hinzu, eine Antwort mit mxins wenn Sie möchten, es zu versuchen. Meiner Meinung nach bevorzuge ich, um den setup-app auf diese Weise.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Am Ende entschied ich mich für die Verwendung Vue ist
ref
- Direktive. Dies ermöglicht eine Komponente verwiesen werden, die von den Eltern für den direkten Zugriff.E. g.
Haben eine compenent-eingetragen auf meinem übergeordnete Instanz:
Rendern der Komponente im template/html-Referenz:
Nun, sonst kann ich Zugriff auf die Komponente extern
Sehen, diese Geige für ein Beispiel: https://jsfiddle.net/xmqgnbu3/1/
(altes Beispiel mit Vue 1: https://jsfiddle.net/6v7y6msr/)
vm
ist nicht definiertvm
durch die Art der Bereiche Module. Sie können etwas tun, wiewindow.app = vm
in Ihremmain.js
. Quelle: forum.vuejs.org/t/how-to-access-vue-from-chrome-console/3606components: { 'my-component': myComponent }
), um für diese zu arbeiten. Ist das ein Unterschied in den Versionen von Vue? Oder mache ich etwas unsicher, wenn ich verlassen, dass aus?Können Sie verwenden, Vue event-system
und
Ist hier das fiddle:
http://jsfiddle.net/hfalucas/wc1gg5v4/59/
Seit Vue2 dies gilt:
//in der Komponente Eine Methode
//in Komponente B erstellt hook
Sehen hier für die Vue-docs.
Und hier ist mehr detail auf, wie diese event-bus genau.
Wenn Sie möchten mehr info, wenn Sie mit den Eigenschaften, Ereignissen und/oder die zentralisierte Staatliche Verwaltung sehen dieser Artikel.
bus
variabel sind, können Sie einen Schritt weiter gehen und Spritzen Sie den bus in Ihre Komponenten mit Requisiten. Ich bin relativ neu in vue, so kann ich Ihnen versichern, dass dies idiomatisch.Können Sie festlegen, ref für untergeordnete Komponenten, die dann in Eltern anrufen können, über $refs:
Add ref untergeordnete Komponente:
Hinzufügen klicken Sie auf Ereignis-parent:
JS:
HTML:
Eine etwas andere (einfachere) version der akzeptierten Antwort:
Haben eine Komponente registriert, die auf das übergeordnete Instanz:
Rendern der Komponente im template/html-Referenz:
Zugriff auf die Komponente Methode:
Dies ist eine einfache Möglichkeit zum Zugriff auf eine Komponente Methoden von anderen Komponenten
Sagen, Sie haben eine
child_method()
in der untergeordneten Komponente:Nun möchten Sie zum ausführen der
child_method
von der übergeordneten Komponente:Wenn Sie ausführen möchten, eine übergeordnete Komponente die Methode von Kind Komponente:
this.$parent.name_of_method()
HINWEIS: Es wird nicht empfohlen, um Zugriff auf die untergeordneten und der übergeordneten Komponente wie diese.
Statt als best-practice-Einsatz von Requisiten & Veranstaltungen für Eltern-Kind-Kommunikation.
Wenn Sie möchten, dass die Kommunikation zwischen den Komponenten sicher verwenden vuex oder event-bus
Bitte Lesen Sie diese sehr hilfreich Artikel
Hier ist eine einfache
Benutzt habe ich eine sehr einfache Lösung. Ich habe ein HTML-element, das die Methode aufruft, in meinem Vue-Komponente, die ich wählen, mit Vanilla JS, und ich den Auslöser klicken!
In der Vue-Komponente, ich habe auch so etwas wie die folgenden:
Dass ich mit Vanilla JS: