UNPKG

vue

Version:

Reactive, component-oriented view layer for modern web interfaces.

45 lines (40 loc) 999 B
/* @flow */ import { remove } from 'shared/util' export default { create (_: any, vnode: VNodeWithData) { registerRef(vnode) }, update (oldVnode: VNodeWithData, vnode: VNodeWithData) { if (oldVnode.data.ref !== vnode.data.ref) { registerRef(oldVnode, true) registerRef(vnode) } }, destroy (vnode: VNodeWithData) { registerRef(vnode, true) } } export function registerRef (vnode: VNodeWithData, isRemoval: ?boolean) { const key = vnode.data.ref if (!key) return const vm = vnode.context const ref = vnode.componentInstance || vnode.elm const refs = vm.$refs if (isRemoval) { if (Array.isArray(refs[key])) { remove(refs[key], ref) } else if (refs[key] === ref) { refs[key] = undefined } } else { if (vnode.data.refInFor) { if (Array.isArray(refs[key]) && refs[key].indexOf(ref) < 0) { refs[key].push(ref) } else { refs[key] = [ref] } } else { refs[key] = ref } } }