VueJS accediendo a un método desde otro método


Estoy usando VueJS para hacer un juego/interfaz de gestión de recursos lo suficientemente simple. En el minuto que estoy buscando para activar la función roll cada 12,5 segundos y utilizar el resultado en otra función. Por el momento, sin embargo, sigo recibiendo el siguiente error:

Uncaught TypeError: No se puede leer la propiedad 'roll' de undefined(...)

He intentado:

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

Pero parece que no puede acceder función. ¿Alguien tiene alguna idea de cómo podría lograr esto?

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.
  }
}
Author: Wing, 2016-11-20

1 answers

Puede acceder a estos métodos directamente en la instancia de la máquina virtual o usarlos en expresiones de directiva. Todos los métodos tendrán su contexto this enlazado automáticamente a la instancia Vue.

Guía de la API de Vue en methods

Dentro de un método en una instancia de Vue puede acceder a otros métodos en la instancia usando this.

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

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

Para acceder a un método fuera de una instancia de Vue, puede asignar la instancia a una variable (como vm en el ejemplo anterior) y llame al método:

vm.methodA();
 54
Author: Wing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-20 19:41:08