2016-11-20 2 views
8

Я использую VueJS для создания достаточно простой игры/интерфейса управления ресурсами. В тот момент я хочу активировать функцию roll каждые 12,5 секунд и использовать результат в другой функции. На данный момент, хотя я получаю следующее сообщение об ошибке:VueJS, обращаясь к методу из другого метода

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

Я пробовал:

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

, но не может получить доступ к функции. Какие-нибудь идеи, как я могу это достичь?

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

Где вы пытаетесь получить доступ метод «roll»? Он внутри одного и того же компонента? В дочернем компоненте? Родительский компонент? Родной? Или какое-то другое место со сложными отношениями? – wing

+0

В настоящий момент нет компонентов. Я активирую метод подсчета при загрузке страницы, а внутри метода подсчета я ищу активировать метод roll. Вызов внутри оператора if в функции counting(). Все в данный момент находится в корневом пространстве. Будет рефакторинг компонентов, как только у меня будет закончена функция barebone. – Jackanapes

ответ

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

Внутри метода на экземпляре Вью вы можете получить доступ к другим методам по примеру с помощью this.

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

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

Чтобы получить доступ к методу вне экземпляра Ви можно присвоить экземпляр к переменному (например, vm в приведенном выше примере) и вызвать метод:

vm.methodA(); 
+1

Я могу получить доступ к данным с помощью 'this', но не методов. Что-то изменилось в vuejs 2.0? –

+0

@SumitMurari: как вы определяете метод на компоненте? Вышеуказанный ответ действителен для Vue 2. – wing

+1

Я ошибся, я сделал ajax-вызов и пытался получить доступ к методам приложений через 'this' и' var self = this; self.method() 'работал для меня. –

Смежные вопросы