2016-11-20 56 views
8

Tôi đang sử dụng VueJS để tạo một trò chơi/giao diện quản lý tài nguyên đơn giản đủ. Vào phút tôi đang tìm cách kích hoạt hàm roll sau mỗi 12,5 giây và sử dụng kết quả trong một hàm khác. Tại thời điểm này mặc dù tôi tiếp tục nhận được lỗi sau:VueJS truy cập phương thức từ phương thức khác

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

Tôi đã thử:

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

nhưng dường như không thể truy cập chức năng. Bất cứ ai có ý tưởng làm thế nào tôi có thể đạt được điều này?

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

đâu bạn cố gắng truy cập phương pháp 'roll'? Nó nằm trong cùng một thành phần? Trong một thành phần con? Một thành phần cha mẹ? Anh chị em? Hoặc một số nơi khác với một mối quan hệ phức tạp? – wing

+0

Không có thành phần nào tại thời điểm này. Tôi kích hoạt phương pháp đếm trên tải trang, và bên trong phương pháp đếm tôi đang tìm cách kích hoạt phương thức cuộn. Cuộc gọi nằm bên trong câu lệnh if trong hàm count(). Tất cả mọi thứ tại thời điểm này là trong phạm vi gốc. Sẽ được tái cấu trúc thành các thành phần khi tôi đã hoàn thành chức năng khung sườn. – Jackanapes

Trả lời

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

Trong một phương thức trên một trường hợp Vue bạn có thể truy cập vào các phương pháp khác về trường hợp sử dụng this.

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

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

Để truy cập vào một phương pháp bên ngoài một trường hợp Vue bạn có thể gán dụ cho một biến (chẳng hạn như vm trong ví dụ trên) và gọi phương thức:

vm.methodA(); 
+1

Tôi có thể truy cập dữ liệu bằng cách sử dụng 'this', nhưng không thể sử dụng phương thức. Có somthing thay đổi trong vuejs 2.0? –

+0

@SumitMurari: bạn định nghĩa phương thức trên thành phần như thế nào? Câu trả lời ở trên là hợp lệ cho Vue 2. – wing

+1

Tôi đã làm sai, tôi đã thực hiện một cuộc gọi ajax và cố gắng truy cập các phương thức ứng dụng thông qua 'this', và' var self = this; self.method() 'làm việc cho tôi. –

Các vấn đề liên quan