@@ -4,6 +4,7 @@ import { EVENT_OPTIONS_PASSIVE } from '../../constants/events'
44import { CODE_ENTER , CODE_SPACE } from '../../constants/key-codes'
55import { RX_HASH , RX_HASH_ID , RX_SPACE_SPLIT } from '../../constants/regex'
66import { arrayIncludes , concat } from '../../utils/array'
7+ import { getInstanceFromDirective } from '../../utils/get-instance-from-directive'
78import {
89 addClass ,
910 getAttr ,
@@ -106,17 +107,17 @@ const removeClickListener = el => {
106107 el [ BV_TOGGLE_CLICK_HANDLER ] = null
107108}
108109
109- const addClickListener = ( el , vnode ) => {
110+ const addClickListener = ( el , instance ) => {
110111 removeClickListener ( el )
111- if ( vnode . context ) {
112+ if ( instance ) {
112113 const handler = event => {
113114 if (
114115 ! ( event . type === 'keydown' && ! arrayIncludes ( KEYDOWN_KEY_CODES , event . keyCode ) ) &&
115116 ! isDisabled ( el )
116117 ) {
117118 const targets = el [ BV_TOGGLE_TARGETS ] || [ ]
118119 targets . forEach ( target => {
119- getEventRoot ( vnode . context ) . $emit ( ROOT_ACTION_EVENT_NAME_TOGGLE , target )
120+ getEventRoot ( instance ) . $emit ( ROOT_ACTION_EVENT_NAME_TOGGLE , target )
120121 } )
121122 }
122123 }
@@ -128,19 +129,19 @@ const addClickListener = (el, vnode) => {
128129 }
129130}
130131
131- const removeRootListeners = ( el , vnode ) => {
132- if ( el [ BV_TOGGLE_ROOT_HANDLER ] && vnode . context ) {
133- getEventRoot ( vnode . context ) . $off (
132+ const removeRootListeners = ( el , instance ) => {
133+ if ( el [ BV_TOGGLE_ROOT_HANDLER ] && instance ) {
134+ getEventRoot ( instance ) . $off (
134135 [ ROOT_EVENT_NAME_STATE , ROOT_EVENT_NAME_SYNC_STATE ] ,
135136 el [ BV_TOGGLE_ROOT_HANDLER ]
136137 )
137138 }
138139 el [ BV_TOGGLE_ROOT_HANDLER ] = null
139140}
140141
141- const addRootListeners = ( el , vnode ) => {
142- removeRootListeners ( el , vnode )
143- if ( vnode . context ) {
142+ const addRootListeners = ( el , instance ) => {
143+ removeRootListeners ( el , instance )
144+ if ( instance ) {
144145 const handler = ( id , state ) => {
145146 // `state` will be `true` if target is expanded
146147 if ( arrayIncludes ( el [ BV_TOGGLE_TARGETS ] || [ ] , id ) ) {
@@ -152,7 +153,7 @@ const addRootListeners = (el, vnode) => {
152153 }
153154 el [ BV_TOGGLE_ROOT_HANDLER ] = handler
154155 // Listen for toggle state changes (public) and sync (private)
155- getEventRoot ( vnode . context ) . $on ( [ ROOT_EVENT_NAME_STATE , ROOT_EVENT_NAME_SYNC_STATE ] , handler )
156+ getEventRoot ( instance ) . $on ( [ ROOT_EVENT_NAME_STATE , ROOT_EVENT_NAME_SYNC_STATE ] , handler )
156157 }
157158}
158159
@@ -178,7 +179,7 @@ const resetProp = (el, prop) => {
178179// Handle directive updates
179180const handleUpdate = ( el , binding , vnode ) => {
180181 /* istanbul ignore next: should never happen */
181- if ( ! IS_BROWSER || ! vnode . context ) {
182+ if ( ! IS_BROWSER || ! getInstanceFromDirective ( vnode , binding ) ) {
182183 return
183184 }
184185
@@ -218,7 +219,7 @@ const handleUpdate = (el, binding, vnode) => {
218219 // Wrap in a `requestAF()` to allow any previous
219220 // click handling to occur first
220221 requestAF ( ( ) => {
221- addClickListener ( el , vnode )
222+ addClickListener ( el , getInstanceFromDirective ( vnode , binding ) )
222223 } )
223224
224225 // If targets array has changed, update
@@ -229,7 +230,10 @@ const handleUpdate = (el, binding, vnode) => {
229230 // Request a state update from targets so that we can
230231 // ensure expanded state is correct (in most cases)
231232 targets . forEach ( target => {
232- getEventRoot ( vnode . context ) . $emit ( ROOT_ACTION_EVENT_NAME_REQUEST_STATE , target )
233+ getEventRoot ( getInstanceFromDirective ( vnode , binding ) ) . $emit (
234+ ROOT_ACTION_EVENT_NAME_REQUEST_STATE ,
235+ target
236+ )
233237 } )
234238 }
235239}
@@ -244,7 +248,7 @@ export const VBToggle = {
244248 // Assume no targets initially
245249 el [ BV_TOGGLE_TARGETS ] = [ ]
246250 // Add our root listeners
247- addRootListeners ( el , vnode )
251+ addRootListeners ( el , getInstanceFromDirective ( vnode , binding ) )
248252 // Initial update of trigger
249253 handleUpdate ( el , binding , vnode )
250254 } ,
@@ -253,7 +257,7 @@ export const VBToggle = {
253257 unbind ( el , binding , vnode ) {
254258 removeClickListener ( el )
255259 // Remove our $root listener
256- removeRootListeners ( el , vnode )
260+ removeRootListeners ( el , getInstanceFromDirective ( vnode , binding ) )
257261 // Reset custom props
258262 resetProp ( el , BV_TOGGLE_ROOT_HANDLER )
259263 resetProp ( el , BV_TOGGLE_CLICK_HANDLER )
0 commit comments