2017-08-02 1 views
1

私は少なくとも1秒間ユーザがdivにマウスを持っている場合にのみアクションを起こしたいと思います。スクリプト内Vueスコープ:@mouseoverの処理を遅らせる方法

<div @mouseover="trigger"></div> 

:テンプレート内部

data() { 
    return { 
     hovered: false 
    } 
} 

methods: { 
    trigger() { 
     setTimeout(function(){ this.hovered = true }, 1000) 
    } 
} 

私の問題は、私はVueの範囲を理解していないということです。 this.hoveredは別の関数の内部にあるため、実際にホバリングされたデータ変数は見つかりません。これに対する解決策は何ですか?

+0

「this」は、setTimeout関数を参照してください。 'var self = this;' setTimeoutはネストされた関数内のvueに 'self'変数を使ってアクセスします。 –

+1

これはあなたの全体的な問題を解決するわけではありません。ユーザーがdivの上を移動すると、setTimoutが実行されます。ボタンに費やされた時間を測定し、onmouseoutイベントが発生したときにキャンセルする必要があります。 –

+1

[コールバック内の正しい\ 'this \ 'にアクセスする方法]の複製がありますか?(https://stackoverflow.com/questions/20279484/how-to-access-the-correct-this-inside-a-callback ) – Bert

答えて

1

setTimeoutの矢印機能を使用してみましたか? thisを維持します。

data() { 
    return { 
     hovered: false 
    } 
} 

methods: { 
    trigger() { 
     setTimeout(() => { this.hovered = true }, 1000) 
    } 
} 
+1

ありがとう、それは働いた!そして私はBertにこのおかげでどのように使うのか学びました。 – Hillcow

関連する問題