2016-11-20 43 views
8

Yeterli kaynak yönetimi oyunu/arabirimi oluşturmak için VueJS kullanıyorum. Dakikada her 12.5 saniyede bir roll işlevini etkinleştirmek ve sonucu başka bir işlevde kullanmak istiyorum. Ben denedimVueJS başka bir yöntemden bir yönteme erişme

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

:

  • app.methods.roll(6);
  • app.methods.roll.roll(6);
  • roll.roll()
  • roll()
anda aşağıdaki hatayı almaya devam olsa

ancak işlevlere erişemiyor gibi görünüyor. Bunu nasıl başarabileceğimi bilen var mı?

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

:

var vm = new Vue({ ... methods: { methodA() { // Method A }, methodB() { // Method B // Call 'methodA' from inside 'methodB' this.methodA() }, }, ... }); 

yöntemi (örneğin yukarıdaki örnekte vm gibi) bir değişkene örneği atayabilirsiniz bir Vue hesabı dışındaki bir yönteme erişmek ve çağırın 'roll' yöntemi? Aynı bileşen içinde mi? Çocuk bileşeninde mi? Bir ana bileşen mi? Kardeş? Ya da karmaşık bir ilişki ile başka bir yer? – wing

+0

Şu anda hiç bileşen yok. Sayma yöntemini sayfa yüklemesinde etkinleştiririm ve sayım yönteminin içinde rulo yöntemini etkinleştirmeyi düşünüyorum. Çağrı, counting() işlevindeki if ifadesinin içinde yer alır. Şu anda her şey kök kapsamda. Barebone işlevini tamamladığımda bileşenlere yeniden düzenlenecektir. – Jackanapes

cevap

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.

- Bir Vue örneğinde bir yöntem dahilinde Vue API Guide on methods

Eğer this kullanarak örneğinde başka yöntemler erişebilirler. Nerede erişmeye çalıştığınız

vm.methodA(); 
+1

Buradaki verileri kullanarak veriye erişebiliyorum, ancak yöntemleri kullanamam. Vuejs 2.0'da bir şey değişti mi? –

+0

@SumitMurari: Bileşendeki yöntemi nasıl tanımlarsınız? Yukarıdaki cevap Vue 2 için geçerlidir. – wing

+1

Hata yaptım, ajax çağrısı yaptım ve “this” ile uygulama yöntemlerine erişmeye çalışıyordum ve “var self = this; self.method() 'benim için çalıştı. –

İlgili konular