Home / Function/ leave() — vue Function Reference

leave() — vue Function Reference

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

Function typescript WebPlatform WebRuntime calls 13 called by 2

Entity Profile

Dependency Diagram

graph TD
  29af0f73_d62b_5291_e707_1f3301bf3357["leave()"]
  394714aa_8288_0f42_8564_08fb679a1d9f["default.update()"]
  394714aa_8288_0f42_8564_08fb679a1d9f -->|calls| 29af0f73_d62b_5291_e707_1f3301bf3357
  5862a5b2_bfcd_8fdd_0c99_eb2da864c08d["default.remove()"]
  5862a5b2_bfcd_8fdd_0c99_eb2da864c08d -->|calls| 29af0f73_d62b_5291_e707_1f3301bf3357
  2be3818d_a4f3_495c_543c_ee071b428982["isDef()"]
  29af0f73_d62b_5291_e707_1f3301bf3357 -->|calls| 2be3818d_a4f3_495c_543c_ee071b428982
  42f54d00_63e8_6550_8a02_9676b3f014dd["resolveTransition()"]
  29af0f73_d62b_5291_e707_1f3301bf3357 -->|calls| 42f54d00_63e8_6550_8a02_9676b3f014dd
  a1f5b8ca_b6d5_6b24_155e_038685c97c85["isUndef()"]
  29af0f73_d62b_5291_e707_1f3301bf3357 -->|calls| a1f5b8ca_b6d5_6b24_155e_038685c97c85
  f8796a4d_0b93_c2df_44b2_78106ba2d82c["getHookArgumentsLength()"]
  29af0f73_d62b_5291_e707_1f3301bf3357 -->|calls| f8796a4d_0b93_c2df_44b2_78106ba2d82c
  d2f853c8_874e_b299_f3cc_cc451ad45eea["toNumber()"]
  29af0f73_d62b_5291_e707_1f3301bf3357 -->|calls| d2f853c8_874e_b299_f3cc_cc451ad45eea
  2d184c1f_e247_ef28_44f9_122886cfd2a5["isObject()"]
  29af0f73_d62b_5291_e707_1f3301bf3357 -->|calls| 2d184c1f_e247_ef28_44f9_122886cfd2a5
  ab290258_9761_9c78_cb21_a18b70c9dafd["checkDuration()"]
  29af0f73_d62b_5291_e707_1f3301bf3357 -->|calls| ab290258_9761_9c78_cb21_a18b70c9dafd
  f1f4b24d_509b_4634_bd6a_d3b0e91f0b48["once()"]
  29af0f73_d62b_5291_e707_1f3301bf3357 -->|calls| f1f4b24d_509b_4634_bd6a_d3b0e91f0b48
  90afa8b0_bab8_d609_1928_b82464e9f59a["removeTransitionClass()"]
  29af0f73_d62b_5291_e707_1f3301bf3357 -->|calls| 90afa8b0_bab8_d609_1928_b82464e9f59a
  8604834e_72c7_6a5f_2bab_e07b77f57174["addTransitionClass()"]
  29af0f73_d62b_5291_e707_1f3301bf3357 -->|calls| 8604834e_72c7_6a5f_2bab_e07b77f57174
  68f648cf_1e2d_1c74_f13a_e4c2bb617bc5["nextFrame()"]
  29af0f73_d62b_5291_e707_1f3301bf3357 -->|calls| 68f648cf_1e2d_1c74_f13a_e4c2bb617bc5
  59a6b470_bd82_8984_e2ea_f9b6bb26dd77["isValidDuration()"]
  29af0f73_d62b_5291_e707_1f3301bf3357 -->|calls| 59a6b470_bd82_8984_e2ea_f9b6bb26dd77
  style 29af0f73_d62b_5291_e707_1f3301bf3357 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