vuejsメソッドでsettimeout()関数を使用するにはどうすればよいですか?
私はすでにこのようなことを試みましたが、それは動作しません
fetchHole: function () {
//get data
},
addHole: function () {
//my query add new
setTimeout(function () { this.fetchHole() }, 1000)
},
このエラーメッセージが表示されます:Uncaught TypeError: this.fetchHole is not a function
これを試してください:setTimeout(this.fetchHole, 1000)
は、匿名関数のthis
がメイン関数ではなく、その匿名関数に関連付けられているためです。
bind()
呼び出しを関数宣言に追加します。
setTimeout(function () { this.fetchHole() }.bind(this), 1000)
Vueコンポーネントのthis
が関数内でアクセス可能になるように。
サイドノート:@nosporの受け入れられた答えは、この特定の状況ではよりクリーンです。 bind
アプローチはもう少し一般化されています-たとえば、匿名関数を実行したい場合に非常に便利です。
JavaScriptのコンテキストthis
の古典的な問題。
コードの次の部分は簡単な解決策を示しています-VuejsでES6を使用している場合(vuecli y babelのデフォルト設定)。矢印機能を使用する
setTimeout(()=>{
this.yourMethod()
},1000);
矢印関数には、独自の
this
がありません。囲むレキシカルスコープのthis
値が使用されます。
これも機能すると思います。
var self = this;
setTimeout(function () { self.fetchHole() } , 1000)
TimeOutを使用した再帰呼び出し:
save: function () {
this.progressToProced = 0
this.progress()
},
progress: function () {
if (this.progressToProced < 100) {
this.progressToProced++
setTimeout(function () { this.progress() }.bind(this), 100)
}
}