@@ -16,7 +16,7 @@ import { keys } from '../../utils/object'
1616const EVENT_SHOW = 'bv::show::modal'
1717
1818// Prop name we use to store info on root element
19- const HANDLER = '__bv_modal_directive__'
19+ const PROPERTY = '__bv_modal_directive__'
2020
2121const EVENT_OPTS = { passive : true }
2222
@@ -64,7 +64,7 @@ const bind = (el, binding, vnode) => {
6464 }
6565 }
6666 }
67- el [ HANDLER ] = handler
67+ el [ PROPERTY ] = { handler, target , trigger }
6868 // If element is not a button, we add `role="button"` for accessibility
6969 setRole ( trigger )
7070 // Listen for click events
@@ -78,19 +78,30 @@ const bind = (el, binding, vnode) => {
7878}
7979
8080const 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
8384 if ( trigger && handler ) {
8485 eventOff ( trigger , 'click' , handler , EVENT_OPTS )
8586 eventOff ( trigger , 'keydown' , handler , EVENT_OPTS )
87+ eventOff ( el , 'click' , handler , EVENT_OPTS )
88+ eventOff ( el , 'keydown' , handler , EVENT_OPTS )
8689 }
87- delete el [ HANDLER ]
90+ delete el [ PROPERTY ]
8891}
8992
9093const 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 )
94105}
95106
96107const updated = ( ) => { }
0 commit comments