From 4f3398eeaa5be386e398afca185da0c2e7be143e Mon Sep 17 00:00:00 2001 From: Markus Oberlehner Date: Thu, 28 Feb 2019 23:37:44 +0100 Subject: [PATCH] fix: handle async component when parent is toggled before resolve (#9572) fix #9571 --- .../vdom/helpers/resolve-async-component.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/core/vdom/helpers/resolve-async-component.js b/src/core/vdom/helpers/resolve-async-component.js index 5714b4ead00..43279b708ce 100644 --- a/src/core/vdom/helpers/resolve-async-component.js +++ b/src/core/vdom/helpers/resolve-async-component.js @@ -8,7 +8,8 @@ import { isTrue, isObject, hasSymbol, - isPromise + isPromise, + remove } from 'core/util/index' import { createEmptyVNode } from 'core/vdom/vnode' @@ -51,17 +52,21 @@ export function resolveAsyncComponent ( return factory.resolved } + const owner = currentRenderingInstance + if (isDef(factory.owners) && factory.owners.indexOf(owner) === -1) { + // already pending + factory.owners.push(owner) + } + if (isTrue(factory.loading) && isDef(factory.loadingComp)) { return factory.loadingComp } - const owner = currentRenderingInstance - if (isDef(factory.owners)) { - // already pending - factory.owners.push(owner) - } else { + if (!isDef(factory.owners)) { const owners = factory.owners = [owner] let sync = true + + if (owner) owner.$on('hook:destroyed', () => remove(owners, owner)) const forceRender = (renderCompleted: boolean) => { for (let i = 0, l = owners.length; i < l; i++) {