Skip to content

Commit 3f644a5

Browse files
arg and bind change update directive, added sync arg
1 parent c50923a commit 3f644a5

File tree

3 files changed

+42
-20
lines changed

3 files changed

+42
-20
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
# v2.0.0
3+
---
4+
### Improved
5+
- Directive rebinds on arg and value updates
6+
- Added `sync` type for no-delay behaviour
7+
# v1.0.5
8+
---
9+
- Minor fixes and renaming
10+
# v1.0.0
11+
---
12+
- Initial Release

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ v-lazy-input must be coupled with either a **v-model** directive or an **@input*
4242
v-lazy-input:[type]="duration"
4343
```
4444

45-
**type** is either _debounce_ or _throttle_, default is _debounce_.
45+
**type** is either _debounce_, _throttle_ or _sync_ (fires immediately), default is _debounce_.
4646

4747
**duration** is a number, default is _500_.
4848

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,41 @@
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

46
export 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

Comments
 (0)