1- import { throttle , debounce } from 'lodash'
2- const _ = { throttle, debounce }
1+ import { throttle , debounce , identity as sync } from 'lodash'
2+ const _ = { throttle, debounce, sync }
3+ const DELAY = 500
4+ const TYPE = 'debounce'
35
46export default {
57 bind ( el , binding , vnode ) {
6- const type = [ 'debounce' , 'throttle' ] . includes ( binding . arg )
7- ? binding . arg
8- : 'debounce'
9-
10- const d = Number ( binding . value ) || 500
11- const { removeListener, addListener, getInputEvents } = getHelpers ( vnode )
12- const inputEvents = getInputEvents ( vnode )
8+ const type = Object . keys ( _ ) . includes ( binding . arg ) ? binding . arg : TYPE
9+ const d = Number ( binding . value ) || DELAY
10+ const { removeListener, addListener, getInputEvents, getHandler } = getHelpers ( vnode )
11+ let inputEvents = vnode . $_originalInputEvents || getInputEvents ( vnode )
1312
1413 if ( ! inputEvents . length ) {
1514 // eslint-disable-next-line
1615 console . log ( '[v-lazy-input] no input events found during bind' )
1716 }
17+
18+ binding . def . unbind ( el , binding , vnode )
1819
19- inputEvents . map ( handler => {
20- removeListener ( 'input' ,
21- handler . _wrapper || /** v >= 2.6.0 */
22- handler . _withTask || /** 2.5.2 >= v > 2.6.0 */
23- handler /** v < 2.5.2*/ )
24- } )
2520 addListener ( 'input' , _ [ type ] ( function ( val ) {
2621 inputEvents . map ( x => { x ( val ) } )
2722 } , d ) , false )
23+
24+ vnode . $_originalInputEvents = inputEvents
2825 } ,
2926 unbind ( el , binding , vnode ) {
30- const { removeListener, getInputEvents } = getHelpers ( vnode )
31-
27+ const { removeListener, getInputEvents, getHandler } = getHelpers ( vnode )
28+
3229 getInputEvents ( vnode ) . map ( handler => {
33- removeListener ( 'input' , handler )
30+ removeListener ( 'input' , getHandler ( handler ) )
3431 } )
32+ } ,
33+ update ( el , binding , vnode , oldVnode ) {
34+ vnode . $_originalInputEvents = oldVnode . $_originalInputEvents
35+
36+ if ( binding . oldValue !== binding . value || binding . oldArg !== binding . arg ) {
37+ binding . def . bind ( el , binding , vnode )
38+ }
3539 }
3640}
3741
@@ -52,13 +56,19 @@ function getHelpers(vnode) {
5256 vnode . data . on [ type ] = handler
5357 }
5458
59+ const getHandler = handler =>
60+ handler . _wrapper || /** v >= 2.6.0 */
61+ handler . _withTask || /** 2.5.2 >= v > 2.6.0 */
62+ handler /** v < 2.5.2*/
63+
5564 const getInputEvents = isCmp
5665 ? ( ) => [ ...( vnode . componentInstance . _events . input || [ ] ) ]
5766 : ( ) => [ vnode . data . on . input ]
5867
5968 return {
6069 removeListener,
6170 addListener,
62- getInputEvents
71+ getInputEvents,
72+ getHandler
6373 }
6474}
0 commit comments