2017-02-13 1 views
27

私はVueのテンプレート内の単純な入力ボックスを持っていると私はこのように、多かれ少なかれデバウンスを使用したい:debounceプロパティがdeprecated in Vue 2てきましたがVue2でデバウンスを実装する方法は?

<input type="text" v-model="filterKey" debounce="500"> 

。この勧告では、「v-onを使用する:入力+サードパーティのデバウンス機能」としか記載されていません。

どのように正しく実装していますか?

私はlodashV-に使用してそれを実装しようとしました:入力Vモデルを、余分な変数なしで行うことが可能である場合、私は疑問に思って。テンプレートに

<input type="text" v-on:input="debounceInput" v-model="searchInput"> 

スクリプトで:

data: function() { 
    return { 
    searchInput: '', 
    filterKey: '' 
    } 
}, 

methods: { 
    debounceInput: _.debounce(function() { 
    this.filterKey = this.searchInput; 
    }, 500) 
} 

filterkeyは次にcomputed小道具に後で使用されます。

+1

は、この1つのHTTPを試してみてください:// stackoverflow.com/questions/41230343/how-to-temporize-the-analysis-of-an-input-field/41232221#41232221 – sobolevn

+2

私は慎重に読むことをお勧めします:https://vuejs.org/v2/guide/migration .html#debounce-vモデル削除のためのParam-Attribute –

+1

eがありますガイド内の例:https://vuejs.org/v2/guide/computed.html#Watchers – Bengt

答えて

37

私はdebounce NPMパッケージを使用して、次のように実装されています:問題のlodashと例を使用して

<input @input="debounceInput"> 

methods: { 
    debounceInput: debounce(function (e) { 
     this.$store.dispatch('updateInput', e.target.value) 
    }, config.debouncers.default) 
} 

、実装は次のようになります。

<input v-on:input="debounceInput"> 

methods: { 
    debounceInput: _.debounce(function (e) { 
    this.filterKey = e.target.value; 
    }, 500) 
} 
+3

ありがとう。他のいくつかのVueドキュメントでも同様の例が見つかりました:https://vuejs.org/v2/examples/index.html(マークダウンエディタ) – sm4

+0

@ sm4アップデートありがとう! –

+0

提案されたソリューションは、ページに複数のコンポーネントインスタンスがある場合に問題があります。問題は説明され、ソリューションはここに表示されます:https://forum.vuejs.org/t/issues-with-vuejs-component-and-debounce/7224/10 – Valera

1

私は受け入れられた答えの前にこの回答を掲載しました。 が正しくありません。これは、 質問の解決策からの一歩です。私は受け入れられた質問を編集して、著者の実装と使用した最終実装の両方を示しました。テンプレートで

:スクリプトで

<input type="text" v-on:input="debounceInput" v-model="searchInput"> 

watch: { 
    searchInput: function() { 
    this.debounceInput(); 
    } 
}, 


コメントに基づいて

linked migration document、私は、コードにいくつかの変更を加えました

そして、フィルタキーを設定するメソッドは同じままです:

methods: { 
    debounceInput: _.debounce(function() { 
    this.filterKey = this.searchInput; 
    }, 500) 
} 

1つの以下の呼び出し(ちょうどv-model、およびないv-on:input)があるようにこれが見えます。

+0

これは、変更ごとに 'debounceInput()'を2回呼び出しませんか?'v-on:'は入力の変更を検出してデバウンスを呼び出すでしょう。モデルがバインドされているので、searchInputのwatch関数も 'debounceInput'を呼び出します。 – mix3d

+0

@ mix3dこの回答は考慮しないでください。ちょっと私の捜査だったので、質問に入れたくなかった。あなたはおそらく正しいでしょう。受け入れられた答えを確認してください。それは正しいです、私は質問に一致するようにそれを編集しました。 – sm4

+0

私の間違い...私はあなたがあなた自身の質問に答えていたことを認識していませんでした。 – mix3d

関連する問題