Home / Function/ leave() — vue Function Reference

leave() — vue Function Reference

Architecture documentation for the leave() function in transition.ts from the vue codebase.

Entity Profile

Dependency Diagram

graph TD
  bb5c970d_2e75_b59b_6ddf_fe4f60d2e887["leave()"]
  7252c3d1_00b4_fa7a_aff5_325056c580fa["default.update()"]
  7252c3d1_00b4_fa7a_aff5_325056c580fa -->|calls| bb5c970d_2e75_b59b_6ddf_fe4f60d2e887
  685afeca_5fcd_0360_7921_55babe351380["default.remove()"]
  685afeca_5fcd_0360_7921_55babe351380 -->|calls| bb5c970d_2e75_b59b_6ddf_fe4f60d2e887
  5b855538_2046_796e_16f9_7327a61399cb["isDef()"]
  bb5c970d_2e75_b59b_6ddf_fe4f60d2e887 -->|calls| 5b855538_2046_796e_16f9_7327a61399cb
  15b015fc_372e_005b_54dc_67a7bfbde5be["resolveTransition()"]
  bb5c970d_2e75_b59b_6ddf_fe4f60d2e887 -->|calls| 15b015fc_372e_005b_54dc_67a7bfbde5be
  299f2646_f776_9b7d_1179_7b9087b1e66c["isUndef()"]
  bb5c970d_2e75_b59b_6ddf_fe4f60d2e887 -->|calls| 299f2646_f776_9b7d_1179_7b9087b1e66c
  ef3b1734_589d_ca16_c8a8_f015ea1202b6["getHookArgumentsLength()"]
  bb5c970d_2e75_b59b_6ddf_fe4f60d2e887 -->|calls| ef3b1734_589d_ca16_c8a8_f015ea1202b6
  f5c3f348_7420_2758_1e07_011bdc52d282["toNumber()"]
  bb5c970d_2e75_b59b_6ddf_fe4f60d2e887 -->|calls| f5c3f348_7420_2758_1e07_011bdc52d282
  3d975ef8_6070_36a5_82f8_9180576e2ca1["isObject()"]
  bb5c970d_2e75_b59b_6ddf_fe4f60d2e887 -->|calls| 3d975ef8_6070_36a5_82f8_9180576e2ca1
  487bc2a1_c3e0_3929_69c5_7a7737ce683e["checkDuration()"]
  bb5c970d_2e75_b59b_6ddf_fe4f60d2e887 -->|calls| 487bc2a1_c3e0_3929_69c5_7a7737ce683e
  a8e0e452_e7c0_9fb5_f4fe_58e890a49204["once()"]
  bb5c970d_2e75_b59b_6ddf_fe4f60d2e887 -->|calls| a8e0e452_e7c0_9fb5_f4fe_58e890a49204
  d0ac78d7_5041_1236_9a5b_88482b24b402["removeTransitionClass()"]
  bb5c970d_2e75_b59b_6ddf_fe4f60d2e887 -->|calls| d0ac78d7_5041_1236_9a5b_88482b24b402
  5da207be_c15b_b75c_a486_6bdb569d90ee["addTransitionClass()"]
  bb5c970d_2e75_b59b_6ddf_fe4f60d2e887 -->|calls| 5da207be_c15b_b75c_a486_6bdb569d90ee
  0e1364f1_8abe_894a_f04e_cd3f2bfbd496["nextFrame()"]
  bb5c970d_2e75_b59b_6ddf_fe4f60d2e887 -->|calls| 0e1364f1_8abe_894a_f04e_cd3f2bfbd496
  461e09a3_b036_90c1_eaa2_96c1cdd85229["isValidDuration()"]
  bb5c970d_2e75_b59b_6ddf_fe4f60d2e887 -->|calls| 461e09a3_b036_90c1_eaa2_96c1cdd85229
  style bb5c970d_2e75_b59b_6ddf_fe4f60d2e887 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

src/platforms/web/runtime/modules/transition.ts lines 169–275

export function leave(vnode: VNodeWithData, rm: Function) {
  const el: any = vnode.elm

  // call enter callback now
  if (isDef(el._enterCb)) {
    el._enterCb.cancelled = true
    el._enterCb()
  }

  const data = resolveTransition(vnode.data.transition)
  if (isUndef(data) || el.nodeType !== 1) {
    return rm()
  }

  /* istanbul ignore if */
  if (isDef(el._leaveCb)) {
    return
  }

  const {
    css,
    type,
    leaveClass,
    leaveToClass,
    leaveActiveClass,
    beforeLeave,
    leave,
    afterLeave,
    leaveCancelled,
    delayLeave,
    duration
  } = data

  const expectsCSS = css !== false && !isIE9
  const userWantsControl = getHookArgumentsLength(leave)

  const explicitLeaveDuration: any = toNumber(
    isObject(duration) ? duration.leave : duration
  )

  if (__DEV__ && isDef(explicitLeaveDuration)) {
    checkDuration(explicitLeaveDuration, 'leave', vnode)
  }

  const cb = (el._leaveCb = once(() => {
    if (el.parentNode && el.parentNode._pending) {
      el.parentNode._pending[vnode.key!] = null
    }
    if (expectsCSS) {
      removeTransitionClass(el, leaveToClass)
      removeTransitionClass(el, leaveActiveClass)
    }
    // @ts-expect-error
    if (cb.cancelled) {
      if (expectsCSS) {
        removeTransitionClass(el, leaveClass)
      }
      leaveCancelled && leaveCancelled(el)
    } else {
      rm()
      afterLeave && afterLeave(el)
    }
    el._leaveCb = null
  }))

  if (delayLeave) {
    delayLeave(performLeave)
  } else {
    performLeave()
  }

  function performLeave() {
    // the delayed leave may have already been cancelled
    // @ts-expect-error
    if (cb.cancelled) {
      return
    }
    // record leaving element
    if (!vnode.data.show && el.parentNode) {
      ;(el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key!] =
        vnode
    }
    beforeLeave && beforeLeave(el)
    if (expectsCSS) {
      addTransitionClass(el, leaveClass)
      addTransitionClass(el, leaveActiveClass)
      nextFrame(() => {
        removeTransitionClass(el, leaveClass)
        // @ts-expect-error
        if (!cb.cancelled) {
          addTransitionClass(el, leaveToClass)
          if (!userWantsControl) {
            if (isValidDuration(explicitLeaveDuration)) {
              setTimeout(cb, explicitLeaveDuration)
            } else {
              whenTransitionEnds(el, type, cb)
            }
          }
        }
      })
    }
    leave && leave(el, cb)
    if (!expectsCSS && !userWantsControl) {
      cb()
    }
  }
}

Domain

Subdomains

Frequently Asked Questions

What does leave() do?
leave() is a function in the vue codebase.
What does leave() call?
leave() calls 13 function(s): addTransitionClass, checkDuration, getHookArgumentsLength, isDef, isObject, isUndef, isValidDuration, nextFrame, and 5 more.
What calls leave()?
leave() is called by 2 function(s): default.remove, default.update.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free