2016-05-26 3 views
10

vuejsメソッドでsettimeout()関数を使用する方法はありますか? vueJsメソッドでタイムアウトを設定する方法

は、私はすでにこのような何かを試してみましたが、それは、私は、このエラーメッセージを取得

fetchHole: function() { 
    //get data 
}, 

addHole: function() { 
    //my query add new 
    setTimeout(function() { this.fetchHole() }, 1000) 
}, 

動作しない:これを試してみてくださいUncaught TypeError: this.fetchHole is not a function

+0

を使用してください: 'のsetTimeout(this.fetchHole、1000)' – nospor

+0

ニースのおかげで、私はあなたが今の解決 – user3757488

+0

@nospor – nospor

答えて

16

を:setTimeout(this.fetchHole, 1000)匿名関数でthisので、その匿名に取り付けられています。あなたのメイン関数ではない関数

25

関数宣言にbind()呼び出しを追加してください:

setTimeout(function() { this.fetchHole() }.bind(this), 1000) 

これにより、Vueコンポーネントのthisがその関数内でアクセスできるようになります。

サイドノート:この特定の状況では、@ nosporの受け入れられた回答がよりクリーンです。 bindアプローチはもう少し一般化されています。たとえば、無名関数を実行する場合には非常に便利です。

0

私はこれも動作すると思います。

var self = this; 
setTimeout(function() { self.fetchHole() } , 1000) 
6

JavaScriptのコンテキストthisの古典的な問題です。

次のコード部分は、VuejsでES6を使用している場合(デフォルトの設定でvuecli y babel)、簡単な解決方法を示しています。このお試しください矢印機能

setTimeout(()=>{ 
    this.yourMethod() 
},1000); 
+0

**これはあなたがやる方法です –

関連する問題