@@ -16,7 +16,7 @@ import { keys } from '../../utils/object'
16
16
const EVENT_SHOW = 'bv::show::modal'
17
17
18
18
// Prop name we use to store info on root element
19
- const HANDLER = '__bv_modal_directive__'
19
+ const PROPERTY = '__bv_modal_directive__'
20
20
21
21
const EVENT_OPTS = { passive : true }
22
22
@@ -64,7 +64,7 @@ const bind = (el, binding, vnode) => {
64
64
}
65
65
}
66
66
}
67
- el [ HANDLER ] = handler
67
+ el [ PROPERTY ] = { handler, target , trigger }
68
68
// If element is not a button, we add `role="button"` for accessibility
69
69
setRole ( trigger )
70
70
// Listen for click events
@@ -78,19 +78,30 @@ const bind = (el, binding, vnode) => {
78
78
}
79
79
80
80
const unbind = el => {
81
- const trigger = getTriggerElement ( el )
82
- const handler = el ? el [ HANDLER ] : null
81
+ const oldProp = el [ PROPERTY ] || { }
82
+ const trigger = oldProp . trigger
83
+ const handler = oldProp . handler
83
84
if ( trigger && handler ) {
84
85
eventOff ( trigger , 'click' , handler , EVENT_OPTS )
85
86
eventOff ( trigger , 'keydown' , handler , EVENT_OPTS )
87
+ eventOff ( el , 'click' , handler , EVENT_OPTS )
88
+ eventOff ( el , 'keydown' , handler , EVENT_OPTS )
86
89
}
87
- delete el [ HANDLER ]
90
+ delete el [ PROPERTY ]
88
91
}
89
92
90
93
const componentUpdated = ( el , binding , vnode ) => {
91
- // We bind and rebind just in case target changes
92
- unbind ( el , binding , vnode )
93
- bind ( el , binding , vnode )
94
+ const oldProp = el [ PROPERTY ] || { }
95
+ const target = getTarget ( binding )
96
+ const trigger = getTriggerElement ( el )
97
+ if ( target !== oldProp . target || trigger !== oldProp . trigger ) {
98
+ // We bind and rebind if the target or trigger changes
99
+ unbind ( el , binding , vnode )
100
+ bind ( el , binding , vnode )
101
+ }
102
+ // If trigger element is not a button, ensure `role="button"`
103
+ // is still set for accessibility
104
+ setRole ( trigger )
94
105
}
95
106
96
107
const updated = ( ) => { }
0 commit comments