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.
InformationsquelleAutor harryg | 2015-11-12
Schreibe einen Kommentar