2017-07-25 12 views
2

ユーザーがアプリケーションから特定のサーバーをリセットまたはシャットダウンできるようにしようとしています。私は今、インターフェース上で作業していて、何が起こっているのかについてユーザにメッセージを伝えたいと思っています。私はデータオブジェクトに定義されたメッセージを表示して、実行されたアクションを示します。私はsetTimeoutを使用してリセットメッセージをリセットして....メッセージを切り替えます。次の方法を参照してください。vueJSメソッドからsetTimeout()が呼び出されない

systemReset: function(){ 
      this.message = this.server + ': Resetting'; 
      setTimeout(function(){ 
       this.message = this.server + ': Reset'; 
      }, 2000); 

    } 

私のブラウザでは、このメッセージが表示され、「リセット中」というメッセージが表示されますが、次の「リセット」メッセージは出力されません。フォーマットエラーがありますか?

ここでは、このメソッドをコンテキストに入れることは、私のコンポーネント全体です。

<template> 
    <div> 
     <p>{{message}}</p> 
     <button @click="systemReset">Reset Server</button> 
     <button @click="systemPowerDown">Poweroff Server</button> 
    </div> 
    </template> 

    <script type="text/javascript"> 
    export default{ 
     data: function(){ 
     return{ 
      message: '' 
     } 
     }, 
     methods: { 
     systemPowerDown: function(){ 
      this.message = this.server + ': Server Down'; 
     }, 
     systemReset: function(){ 
      this.message = this.server + ': Resetting'; 
      setTimeout(function(){ 
       this.message = this.server + ': Reset'; 
      }, 2000); 
     } 
     }, 
     props: ['server'] 
    } 
    </script> 

Am I missing something obvious? Or is there some vue limitation I am unaware of? 
+0

を指しthis.message'は、いつ、どのようにあなたがそれを示している、文字列のですか? – Teemu

+1

timeout関数の中で 'this'キーワードを使用するのは難しいので、systemResetではなくtimeout関数を参照していますか? –

+0

私の段落にそれを出力してください – DMrFrost

答えて

3

thisの値がsetTimeout内部異なります。あなたはES6を使用している場合

、あなたは矢印の機能を使用することができます。

setTimeout(() => { this.message = this.server + ': Reset' }, 2000) 

それともいないのであれば、あなたはthisの値がバインドできます持つ、しかし

setTimeout(function() { 
    this.message = this.server + ': Reset' 
}.bind(this)) 

をVueを使用したことがなく、this.messageの値を変更したときに再レンダリングすることがわかっているのか、コンポーネントの状態などを変更する必要があるのか​​分かりません。

1

setTimeoutの中にいるので、thisはあなたのVueインスタンスに対応していません。あなたは代わりにselfを使用することができます。

systemReset: function(){ 
    this.message = this.server + ': Resetting'; 
    var self = this; 
    setTimeout(function(){ 
     self.message = self.server + ': Reset'; 
    }, 2000); 
} 
1

はタイムアウト機能のうち、変数にthisを保存するのに解決していませんか?

ようなので:そう

systemReset: function(){ 
      var $this = this; 
      $this.message = this.server + ': Resetting'; 
      setTimeout(function(){ 
       $this.message = this.server + ': Reset'; 
      }, 2000); 
     } 

は `正しい機能にsystemReset

関連する問題