2016-06-02 12 views
6

Ich weiß, dass Vue.js Funktionalität eingebaut hat, um auf einem Eingabefeld zu entprellen. Ich habe einen Schieberegler erstellt, der eine Methode auslöst, die kein Eingabefeld verwendet, und ich habe mich gefragt, ob ich die Entprellfunktionalität innerhalb einer Methode nutzen kann.Vue entprellen eine Methode?

Ist es sogar möglich, diese Funktionalität zu verwenden, ohne einfach eine Entprellung zu einem Eingang hinzuzufügen? Oder muss ich dafür eigene Funktionen schreiben?

Ich habe gerade versucht, so etwas wie dies zu tun, aber es scheint nicht zu funktionieren:

this.$options.filters.debounce(this.search(), 2000); 
+2

Sieht nicht so aus, als gäbe es in Vue.js eine leicht zu beantwortende Entprellfunktion - schreibe einfach eine - es sind etwa 5 Zeilen Code und du solltest in der Lage sein, zahlreiche Implementierungen auf SO Antworten oder eine schnelle Google zu finden. –

Antwort

9

Für alle, die auf fragt sich, wie dies zu tun. Ich reparierte diese durch einen ehrfürchtigen kleinen Schnipsel mit mir gefunden:

Attribut in meinen Daten

timer: 0 

Debounce Funktionalität

// clears the timer on a call so there is always x seconds in between calls 
clearTimeout(this.timer); 

// if the timer resets before it hits 150ms it will not run 
this.timer = setTimeout(function(){ 
    this.search() 
}.bind(this), 150); 
+1

Mann !! Das war so hilfreich nach 2 Stunden mit diesem $ Hit. Ich liebe dich, Mann. – juliangonzalez

+0

Ich bin mir nicht sicher, ob das hier herkommt, aber ich lese hier ein ähnliches Snippet: https://schier.co/blog/2014/12/08/wait-for-user-to-stop-typing -using-javascript.html Es könnte sich lohnen, dem Autor einen Kredit zu geben, wenn das deine Quelle wäre. – bjmc

+0

@bjmc hat es von einem Codepen von jemand anderem bekommen, das ist nicht die Quelle. –

4

Du this.search() Ausführungsergebnis setzen in Entprellen, versuchen Sie dies:

var bufferSearch = Vue.options.filters.debounce(this.search.bind(this), 150); 
bufferSearch();