VueJS, обращаясь к методу другого метода
Я использую VueJS, чтобы сделать достаточно простую игру/интерфейс управления ресурсами. В тот момент я хочу активировать функцию roll
каждые 12,5 секунд и использовать результат в другой функции.
В настоящий момент я продолжаю получать следующую ошибку:
Uncaught TypeError: Не удается прочитать свойство 'roll' из 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.
}
}
Ответы
Ответ 1
Вы можете получить доступ к этим методам непосредственно на экземпляре виртуальной машины или использовать их в директивных выражениях. Все методы будут иметь контекст this
, автоматически связанный с экземпляром Vue.
- Руководство по API Vue на methods
Внутри метода экземпляра Vue вы можете получить доступ к другим методам в экземпляре, используя this
.
var vm = new Vue({
...
methods: {
methodA() {
// Method A
},
methodB() {
// Method B
// Call `methodA` from inside `methodB`
this.methodA()
},
},
...
});
Чтобы получить доступ к методу вне экземпляра Vue, вы можете назначить экземпляр переменной (например, vm
в примере выше) и вызвать метод:
vm.methodA();
Ответ 2
Вы можете использовать vm.methodName();
Пример:
let vm = new Vue({
el: '#app',
data: {},
methods: {
methodA: function () {
console.log('hello');
},
methodB: function () {
// calling methodA
vm.methodA();
}
},
})
Ответ 3
let vm = new Vue({
el: '#testfunc',
data:{
sp1: "Hi I'm textbox1",
sp2: "Hi I'm textbox2"
},
methods:{
chsp1:function(){
this.sp1 = "I'm swapped from textbox2"
},
chsp2:function(){
this.sp2 = "I'm swapped from textbox1"
},
swapit:function(){
this.chsp1();
this.chsp2();
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="testfunc">
<input type="text" :value="sp1"></span>
<input type="text" :value="sp2"></span>
<button @click="swapit()">Swap</button>
</div>