2016-11-20 4 views
8

Ich benutze VueJS, um ein einfaches Ressourcenmanagement-Spiel/Interface zu erstellen. Momentan suche ich die Funktion roll alle 12,5 Sekunden und verwende das Ergebnis in einer anderen Funktion. Im Moment obwohl ich folgende Fehlermeldung erhalte:VueJS Zugriff auf eine Methode von einer anderen Methode

Uncaught TypeError: Cannot read property 'roll' of undefined(...)

ich versucht habe:

  • app.methods.roll(6);
  • app.methods.roll.roll(6);
  • roll.roll()
  • roll()

kann aber scheinbar nicht auf die Funktion zugreifen. Irgendwelche Ideen, wie ich das erreichen könnte?

methods: { 

    // Push responses to inbox. 
    say: function say(responseText) { 
    console.log(responseText); 
    var pushText = responseText; 
    this.inbox.push({ text: pushText }); 
    }, 

    // Roll for events 
    roll: function roll(upper) { 
    var randomNumber = Math.floor(Math.random() * 6 * upper) + 1; 
    console.log(randomNumber); 
    return randomNumber; 
    }, 

    // Initiates passage of time and rolls counters every 5 time units. 
    count: function count() { 
    function counting() { 
     app.town.date += 1; 
     app.gameState.roll += 0.2; 

     if (app.gameState.roll === 1) { 
     var result = app.methods.roll(6); 
     app.gameState.roll === 0; 
     return result; 
     } 
    } 

    setInterval(counting, 2500); 

    ... 

    // Activates the roll at times. 
    } 
} 
+0

Wo wollen Sie Zugang die 'Roll'-Methode? Ist es in der gleichen Komponente? In einer Kindkomponente? Eine übergeordnete Komponente? Geschwister? Oder an einem anderen Ort mit einer komplizierten Beziehung? – wing

+0

Keine Komponenten im Moment überhaupt. Ich aktiviere die Zählmethode beim Laden der Seite, und innerhalb der Zählmethode suche ich nach der Roll-Methode. Der Aufruf befindet sich innerhalb der if-Anweisung in der Funktion counting(). Alles ist im Moment im Wurzelbereich. Refactoring zu Komponenten sobald ich die Barebone-Funktionalität abgeschlossen habe. – Jackanapes

Antwort

30

You can access these methods directly on the VM instance, or use them in directive expressions. All methods will have their this context automatically bound to the Vue instance.

- Vue API Guide on methods

Innerhalb einer Methode auf einem Vue Beispiel können Sie andere Methoden auf der Instanz zugreifen this verwenden.

var vm = new Vue({ 
    ... 
    methods: { 
    methodA() { 
     // Method A 
    }, 
    methodB() { 
     // Method B 

     // Call `methodA` from inside `methodB` 
     this.methodA() 
    }, 
    }, 
    ... 
}); 

Um eine Methode außerhalb eines Vue-Instanz zugreifen Sie die Instanz auf eine Variable (wie vm im Beispiel oben) und rufen Sie die Methode zuordnen:

vm.methodA(); 
+1

Ich bin in der Lage, auf die Daten zugreifen mit 'this', aber nicht Methoden. Hat sich etwas in Vuejs 2.0 geändert? –

+0

@SumitMurari: Wie definierst du die Methode auf der Komponente? Die obige Antwort ist gültig für Vue 2. – wing

+1

Ich machte einen Fehler, ich machte einen Ajax-Anruf und versuchte über 'this' auf App-Methoden zuzugreifen, und' var self = this; self.method() 'hat für mich gearbeitet. –

Verwandte Themen