nav tabs on admin dashboard
This commit is contained in:
51
node_modules/vue/src/core/vdom/create-component.js
generated
vendored
51
node_modules/vue/src/core/vdom/create-component.js
generated
vendored
@@ -34,12 +34,7 @@ import {
|
||||
|
||||
// inline hooks to be invoked on component VNodes during patch
|
||||
const componentVNodeHooks = {
|
||||
init (
|
||||
vnode: VNodeWithData,
|
||||
hydrating: boolean,
|
||||
parentElm: ?Node,
|
||||
refElm: ?Node
|
||||
): ?boolean {
|
||||
init (vnode: VNodeWithData, hydrating: boolean): ?boolean {
|
||||
if (
|
||||
vnode.componentInstance &&
|
||||
!vnode.componentInstance._isDestroyed &&
|
||||
@@ -51,9 +46,7 @@ const componentVNodeHooks = {
|
||||
} else {
|
||||
const child = vnode.componentInstance = createComponentInstanceForVnode(
|
||||
vnode,
|
||||
activeInstance,
|
||||
parentElm,
|
||||
refElm
|
||||
activeInstance
|
||||
)
|
||||
child.$mount(hydrating ? vnode.elm : undefined, hydrating)
|
||||
}
|
||||
@@ -136,7 +129,7 @@ export function createComponent (
|
||||
let asyncFactory
|
||||
if (isUndef(Ctor.cid)) {
|
||||
asyncFactory = Ctor
|
||||
Ctor = resolveAsyncComponent(asyncFactory, baseCtor, context)
|
||||
Ctor = resolveAsyncComponent(asyncFactory, baseCtor)
|
||||
if (Ctor === undefined) {
|
||||
// return a placeholder node for async component, which is rendered
|
||||
// as a comment node but preserves all the raw information for the node.
|
||||
@@ -215,15 +208,11 @@ export function createComponent (
|
||||
export function createComponentInstanceForVnode (
|
||||
vnode: any, // we know it's MountedComponentVNode but flow doesn't
|
||||
parent: any, // activeInstance in lifecycle state
|
||||
parentElm?: ?Node,
|
||||
refElm?: ?Node
|
||||
): Component {
|
||||
const options: InternalComponentOptions = {
|
||||
_isComponent: true,
|
||||
parent,
|
||||
_parentVnode: vnode,
|
||||
_parentElm: parentElm || null,
|
||||
_refElm: refElm || null
|
||||
parent
|
||||
}
|
||||
// check inline-template render functions
|
||||
const inlineTemplate = vnode.data.inlineTemplate
|
||||
@@ -238,20 +227,42 @@ function installComponentHooks (data: VNodeData) {
|
||||
const hooks = data.hook || (data.hook = {})
|
||||
for (let i = 0; i < hooksToMerge.length; i++) {
|
||||
const key = hooksToMerge[i]
|
||||
hooks[key] = componentVNodeHooks[key]
|
||||
const existing = hooks[key]
|
||||
const toMerge = componentVNodeHooks[key]
|
||||
if (existing !== toMerge && !(existing && existing._merged)) {
|
||||
hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function mergeHook (f1: any, f2: any): Function {
|
||||
const merged = (a, b) => {
|
||||
// flow complains about extra args which is why we use any
|
||||
f1(a, b)
|
||||
f2(a, b)
|
||||
}
|
||||
merged._merged = true
|
||||
return merged
|
||||
}
|
||||
|
||||
// transform component v-model info (value and callback) into
|
||||
// prop and event handler respectively.
|
||||
function transformModel (options, data: any) {
|
||||
const prop = (options.model && options.model.prop) || 'value'
|
||||
const event = (options.model && options.model.event) || 'input'
|
||||
;(data.props || (data.props = {}))[prop] = data.model.value
|
||||
;(data.attrs || (data.attrs = {}))[prop] = data.model.value
|
||||
const on = data.on || (data.on = {})
|
||||
if (isDef(on[event])) {
|
||||
on[event] = [data.model.callback].concat(on[event])
|
||||
const existing = on[event]
|
||||
const callback = data.model.callback
|
||||
if (isDef(existing)) {
|
||||
if (
|
||||
Array.isArray(existing)
|
||||
? existing.indexOf(callback) === -1
|
||||
: existing !== callback
|
||||
) {
|
||||
on[event] = [callback].concat(existing)
|
||||
}
|
||||
} else {
|
||||
on[event] = data.model.callback
|
||||
on[event] = callback
|
||||
}
|
||||
}
|
||||
|
||||
2
node_modules/vue/src/core/vdom/create-element.js
generated
vendored
2
node_modules/vue/src/core/vdom/create-element.js
generated
vendored
@@ -102,7 +102,7 @@ export function _createElement (
|
||||
config.parsePlatformTagName(tag), data, children,
|
||||
undefined, undefined, context
|
||||
)
|
||||
} else if (isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {
|
||||
} else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {
|
||||
// component
|
||||
vnode = createComponent(Ctor, data, context, children, tag)
|
||||
} else {
|
||||
|
||||
29
node_modules/vue/src/core/vdom/create-functional-component.js
generated
vendored
29
node_modules/vue/src/core/vdom/create-functional-component.js
generated
vendored
@@ -5,6 +5,7 @@ import { createElement } from './create-element'
|
||||
import { resolveInject } from '../instance/inject'
|
||||
import { normalizeChildren } from '../vdom/helpers/normalize-children'
|
||||
import { resolveSlots } from '../instance/render-helpers/resolve-slots'
|
||||
import { normalizeScopedSlots } from '../vdom/helpers/normalize-scoped-slots'
|
||||
import { installRenderHelpers } from '../instance/render-helpers/index'
|
||||
|
||||
import {
|
||||
@@ -48,7 +49,22 @@ export function FunctionalRenderContext (
|
||||
this.parent = parent
|
||||
this.listeners = data.on || emptyObject
|
||||
this.injections = resolveInject(options.inject, parent)
|
||||
this.slots = () => resolveSlots(children, parent)
|
||||
this.slots = () => {
|
||||
if (!this.$slots) {
|
||||
normalizeScopedSlots(
|
||||
data.scopedSlots,
|
||||
this.$slots = resolveSlots(children, parent)
|
||||
)
|
||||
}
|
||||
return this.$slots
|
||||
}
|
||||
|
||||
Object.defineProperty(this, 'scopedSlots', ({
|
||||
enumerable: true,
|
||||
get () {
|
||||
return normalizeScopedSlots(data.scopedSlots, this.slots())
|
||||
}
|
||||
}: any))
|
||||
|
||||
// support for compiled functional template
|
||||
if (isCompiled) {
|
||||
@@ -56,7 +72,7 @@ export function FunctionalRenderContext (
|
||||
this.$options = options
|
||||
// pre-resolve slots for renderSlot()
|
||||
this.$slots = this.slots()
|
||||
this.$scopedSlots = data.scopedSlots || emptyObject
|
||||
this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots)
|
||||
}
|
||||
|
||||
if (options._scopeId) {
|
||||
@@ -105,24 +121,27 @@ export function createFunctionalComponent (
|
||||
const vnode = options.render.call(null, renderContext._c, renderContext)
|
||||
|
||||
if (vnode instanceof VNode) {
|
||||
return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options)
|
||||
return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)
|
||||
} else if (Array.isArray(vnode)) {
|
||||
const vnodes = normalizeChildren(vnode) || []
|
||||
const res = new Array(vnodes.length)
|
||||
for (let i = 0; i < vnodes.length; i++) {
|
||||
res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options)
|
||||
res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext)
|
||||
}
|
||||
return res
|
||||
}
|
||||
}
|
||||
|
||||
function cloneAndMarkFunctionalResult (vnode, data, contextVm, options) {
|
||||
function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {
|
||||
// #7817 clone node before setting fnContext, otherwise if the node is reused
|
||||
// (e.g. it was from a cached normal slot) the fnContext causes named slots
|
||||
// that should not be matched to match.
|
||||
const clone = cloneVNode(vnode)
|
||||
clone.fnContext = contextVm
|
||||
clone.fnOptions = options
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
(clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext
|
||||
}
|
||||
if (data.slot) {
|
||||
(clone.data || (clone.data = {})).slot = data.slot
|
||||
}
|
||||
|
||||
45
node_modules/vue/src/core/vdom/helpers/resolve-async-component.js
generated
vendored
45
node_modules/vue/src/core/vdom/helpers/resolve-async-component.js
generated
vendored
@@ -7,10 +7,13 @@ import {
|
||||
isUndef,
|
||||
isTrue,
|
||||
isObject,
|
||||
hasSymbol
|
||||
hasSymbol,
|
||||
isPromise,
|
||||
remove
|
||||
} from 'core/util/index'
|
||||
|
||||
import { createEmptyVNode } from 'core/vdom/vnode'
|
||||
import { currentRenderingInstance } from 'core/instance/render'
|
||||
|
||||
function ensureCtor (comp: any, base) {
|
||||
if (
|
||||
@@ -39,8 +42,7 @@ export function createAsyncPlaceholder (
|
||||
|
||||
export function resolveAsyncComponent (
|
||||
factory: Function,
|
||||
baseCtor: Class<Component>,
|
||||
context: Component
|
||||
baseCtor: Class<Component>
|
||||
): Class<Component> | void {
|
||||
if (isTrue(factory.error) && isDef(factory.errorComp)) {
|
||||
return factory.errorComp
|
||||
@@ -50,20 +52,29 @@ 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
|
||||
}
|
||||
|
||||
if (isDef(factory.contexts)) {
|
||||
// already pending
|
||||
factory.contexts.push(context)
|
||||
} else {
|
||||
const contexts = factory.contexts = [context]
|
||||
if (!isDef(factory.owners)) {
|
||||
const owners = factory.owners = [owner]
|
||||
let sync = true
|
||||
|
||||
const forceRender = () => {
|
||||
for (let i = 0, l = contexts.length; i < l; i++) {
|
||||
contexts[i].$forceUpdate()
|
||||
;(owner: any).$on('hook:destroyed', () => remove(owners, owner))
|
||||
|
||||
const forceRender = (renderCompleted: boolean) => {
|
||||
for (let i = 0, l = owners.length; i < l; i++) {
|
||||
(owners[i]: any).$forceUpdate()
|
||||
}
|
||||
|
||||
if (renderCompleted) {
|
||||
owners.length = 0
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +84,9 @@ export function resolveAsyncComponent (
|
||||
// invoke callbacks only if this is not a synchronous resolve
|
||||
// (async resolves are shimmed as synchronous during SSR)
|
||||
if (!sync) {
|
||||
forceRender()
|
||||
forceRender(true)
|
||||
} else {
|
||||
owners.length = 0
|
||||
}
|
||||
})
|
||||
|
||||
@@ -84,19 +97,19 @@ export function resolveAsyncComponent (
|
||||
)
|
||||
if (isDef(factory.errorComp)) {
|
||||
factory.error = true
|
||||
forceRender()
|
||||
forceRender(true)
|
||||
}
|
||||
})
|
||||
|
||||
const res = factory(resolve, reject)
|
||||
|
||||
if (isObject(res)) {
|
||||
if (typeof res.then === 'function') {
|
||||
if (isPromise(res)) {
|
||||
// () => Promise
|
||||
if (isUndef(factory.resolved)) {
|
||||
res.then(resolve, reject)
|
||||
}
|
||||
} else if (isDef(res.component) && typeof res.component.then === 'function') {
|
||||
} else if (isPromise(res.component)) {
|
||||
res.component.then(resolve, reject)
|
||||
|
||||
if (isDef(res.error)) {
|
||||
@@ -111,7 +124,7 @@ export function resolveAsyncComponent (
|
||||
setTimeout(() => {
|
||||
if (isUndef(factory.resolved) && isUndef(factory.error)) {
|
||||
factory.loading = true
|
||||
forceRender()
|
||||
forceRender(false)
|
||||
}
|
||||
}, res.delay || 200)
|
||||
}
|
||||
|
||||
26
node_modules/vue/src/core/vdom/helpers/update-listeners.js
generated
vendored
26
node_modules/vue/src/core/vdom/helpers/update-listeners.js
generated
vendored
@@ -1,7 +1,15 @@
|
||||
/* @flow */
|
||||
|
||||
import { warn } from 'core/util/index'
|
||||
import { cached, isUndef, isPlainObject } from 'shared/util'
|
||||
import {
|
||||
warn,
|
||||
invokeWithErrorHandling
|
||||
} from 'core/util/index'
|
||||
import {
|
||||
cached,
|
||||
isUndef,
|
||||
isTrue,
|
||||
isPlainObject
|
||||
} from 'shared/util'
|
||||
|
||||
const normalizeEvent = cached((name: string): {
|
||||
name: string,
|
||||
@@ -25,17 +33,17 @@ const normalizeEvent = cached((name: string): {
|
||||
}
|
||||
})
|
||||
|
||||
export function createFnInvoker (fns: Function | Array<Function>): Function {
|
||||
export function createFnInvoker (fns: Function | Array<Function>, vm: ?Component): Function {
|
||||
function invoker () {
|
||||
const fns = invoker.fns
|
||||
if (Array.isArray(fns)) {
|
||||
const cloned = fns.slice()
|
||||
for (let i = 0; i < cloned.length; i++) {
|
||||
cloned[i].apply(null, arguments)
|
||||
invokeWithErrorHandling(cloned[i], null, arguments, vm, `v-on handler`)
|
||||
}
|
||||
} else {
|
||||
// return handler return value for single handlers
|
||||
return fns.apply(null, arguments)
|
||||
return invokeWithErrorHandling(fns, null, arguments, vm, `v-on handler`)
|
||||
}
|
||||
}
|
||||
invoker.fns = fns
|
||||
@@ -47,6 +55,7 @@ export function updateListeners (
|
||||
oldOn: Object,
|
||||
add: Function,
|
||||
remove: Function,
|
||||
createOnceHandler: Function,
|
||||
vm: Component
|
||||
) {
|
||||
let name, def, cur, old, event
|
||||
@@ -66,9 +75,12 @@ export function updateListeners (
|
||||
)
|
||||
} else if (isUndef(old)) {
|
||||
if (isUndef(cur.fns)) {
|
||||
cur = on[name] = createFnInvoker(cur)
|
||||
cur = on[name] = createFnInvoker(cur, vm)
|
||||
}
|
||||
add(event.name, cur, event.once, event.capture, event.passive, event.params)
|
||||
if (isTrue(event.once)) {
|
||||
cur = on[name] = createOnceHandler(event.name, cur, event.capture)
|
||||
}
|
||||
add(event.name, cur, event.capture, event.passive, event.params)
|
||||
} else if (cur !== old) {
|
||||
old.fns = cur
|
||||
on[name] = old
|
||||
|
||||
1
node_modules/vue/src/core/vdom/modules/directives.js
generated
vendored
1
node_modules/vue/src/core/vdom/modules/directives.js
generated
vendored
@@ -40,6 +40,7 @@ function _update (oldVnode, vnode) {
|
||||
} else {
|
||||
// existing directive, update
|
||||
dir.oldValue = oldDir.value
|
||||
dir.oldArg = oldDir.arg
|
||||
callHook(dir, 'update', vnode, oldVnode)
|
||||
if (dir.def && dir.def.componentUpdated) {
|
||||
dirsWithPostpatch.push(dir)
|
||||
|
||||
38
node_modules/vue/src/core/vdom/patch.js
generated
vendored
38
node_modules/vue/src/core/vdom/patch.js
generated
vendored
@@ -212,7 +212,7 @@ export function createPatchFunction (backend) {
|
||||
if (isDef(i)) {
|
||||
const isReactivated = isDef(vnode.componentInstance) && i.keepAlive
|
||||
if (isDef(i = i.hook) && isDef(i = i.init)) {
|
||||
i(vnode, false /* hydrating */, parentElm, refElm)
|
||||
i(vnode, false /* hydrating */)
|
||||
}
|
||||
// after calling the init hook, if the vnode is a child component
|
||||
// it should've created a child instance and mounted it. the child
|
||||
@@ -220,6 +220,7 @@ export function createPatchFunction (backend) {
|
||||
// in that case we can just return the element and be done.
|
||||
if (isDef(vnode.componentInstance)) {
|
||||
initComponent(vnode, insertedVnodeQueue)
|
||||
insert(parentElm, vnode.elm, refElm)
|
||||
if (isTrue(isReactivated)) {
|
||||
reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm)
|
||||
}
|
||||
@@ -271,7 +272,7 @@ export function createPatchFunction (backend) {
|
||||
function insert (parent, elm, ref) {
|
||||
if (isDef(parent)) {
|
||||
if (isDef(ref)) {
|
||||
if (ref.parentNode === parent) {
|
||||
if (nodeOps.parentNode(ref) === parent) {
|
||||
nodeOps.insertBefore(parent, elm, ref)
|
||||
}
|
||||
} else {
|
||||
@@ -426,20 +427,20 @@ export function createPatchFunction (backend) {
|
||||
} else if (isUndef(oldEndVnode)) {
|
||||
oldEndVnode = oldCh[--oldEndIdx]
|
||||
} else if (sameVnode(oldStartVnode, newStartVnode)) {
|
||||
patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue)
|
||||
patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx)
|
||||
oldStartVnode = oldCh[++oldStartIdx]
|
||||
newStartVnode = newCh[++newStartIdx]
|
||||
} else if (sameVnode(oldEndVnode, newEndVnode)) {
|
||||
patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue)
|
||||
patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx)
|
||||
oldEndVnode = oldCh[--oldEndIdx]
|
||||
newEndVnode = newCh[--newEndIdx]
|
||||
} else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right
|
||||
patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue)
|
||||
patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx)
|
||||
canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm))
|
||||
oldStartVnode = oldCh[++oldStartIdx]
|
||||
newEndVnode = newCh[--newEndIdx]
|
||||
} else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left
|
||||
patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue)
|
||||
patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx)
|
||||
canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm)
|
||||
oldEndVnode = oldCh[--oldEndIdx]
|
||||
newStartVnode = newCh[++newStartIdx]
|
||||
@@ -453,7 +454,7 @@ export function createPatchFunction (backend) {
|
||||
} else {
|
||||
vnodeToMove = oldCh[idxInOld]
|
||||
if (sameVnode(vnodeToMove, newStartVnode)) {
|
||||
patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue)
|
||||
patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx)
|
||||
oldCh[idxInOld] = undefined
|
||||
canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm)
|
||||
} else {
|
||||
@@ -497,11 +498,23 @@ export function createPatchFunction (backend) {
|
||||
}
|
||||
}
|
||||
|
||||
function patchVnode (oldVnode, vnode, insertedVnodeQueue, removeOnly) {
|
||||
function patchVnode (
|
||||
oldVnode,
|
||||
vnode,
|
||||
insertedVnodeQueue,
|
||||
ownerArray,
|
||||
index,
|
||||
removeOnly
|
||||
) {
|
||||
if (oldVnode === vnode) {
|
||||
return
|
||||
}
|
||||
|
||||
if (isDef(vnode.elm) && isDef(ownerArray)) {
|
||||
// clone reused vnode
|
||||
vnode = ownerArray[index] = cloneVNode(vnode)
|
||||
}
|
||||
|
||||
const elm = vnode.elm = oldVnode.elm
|
||||
|
||||
if (isTrue(oldVnode.isAsyncPlaceholder)) {
|
||||
@@ -542,6 +555,9 @@ export function createPatchFunction (backend) {
|
||||
if (isDef(oldCh) && isDef(ch)) {
|
||||
if (oldCh !== ch) updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly)
|
||||
} else if (isDef(ch)) {
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
checkDuplicateKeys(ch)
|
||||
}
|
||||
if (isDef(oldVnode.text)) nodeOps.setTextContent(elm, '')
|
||||
addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue)
|
||||
} else if (isDef(oldCh)) {
|
||||
@@ -681,7 +697,7 @@ export function createPatchFunction (backend) {
|
||||
}
|
||||
}
|
||||
|
||||
return function patch (oldVnode, vnode, hydrating, removeOnly, parentElm, refElm) {
|
||||
return function patch (oldVnode, vnode, hydrating, removeOnly) {
|
||||
if (isUndef(vnode)) {
|
||||
if (isDef(oldVnode)) invokeDestroyHook(oldVnode)
|
||||
return
|
||||
@@ -693,12 +709,12 @@ export function createPatchFunction (backend) {
|
||||
if (isUndef(oldVnode)) {
|
||||
// empty mount (likely as component), create new root element
|
||||
isInitialPatch = true
|
||||
createElm(vnode, insertedVnodeQueue, parentElm, refElm)
|
||||
createElm(vnode, insertedVnodeQueue)
|
||||
} else {
|
||||
const isRealElement = isDef(oldVnode.nodeType)
|
||||
if (!isRealElement && sameVnode(oldVnode, vnode)) {
|
||||
// patch existing root node
|
||||
patchVnode(oldVnode, vnode, insertedVnodeQueue, removeOnly)
|
||||
patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly)
|
||||
} else {
|
||||
if (isRealElement) {
|
||||
// mounting to a real element
|
||||
|
||||
7
node_modules/vue/src/core/vdom/vnode.js
generated
vendored
7
node_modules/vue/src/core/vdom/vnode.js
generated
vendored
@@ -26,6 +26,7 @@ export default class VNode {
|
||||
ssrContext: Object | void;
|
||||
fnContext: Component | void; // real context vm for functional nodes
|
||||
fnOptions: ?ComponentOptions; // for SSR caching
|
||||
devtoolsMeta: ?Object; // used to store functional render context for devtools
|
||||
fnScopeId: ?string; // functional scope id support
|
||||
|
||||
constructor (
|
||||
@@ -89,7 +90,10 @@ export function cloneVNode (vnode: VNode): VNode {
|
||||
const cloned = new VNode(
|
||||
vnode.tag,
|
||||
vnode.data,
|
||||
vnode.children,
|
||||
// #7975
|
||||
// clone children array to avoid mutating original in case of cloning
|
||||
// a child.
|
||||
vnode.children && vnode.children.slice(),
|
||||
vnode.text,
|
||||
vnode.elm,
|
||||
vnode.context,
|
||||
@@ -103,6 +107,7 @@ export function cloneVNode (vnode: VNode): VNode {
|
||||
cloned.fnContext = vnode.fnContext
|
||||
cloned.fnOptions = vnode.fnOptions
|
||||
cloned.fnScopeId = vnode.fnScopeId
|
||||
cloned.asyncMeta = vnode.asyncMeta
|
||||
cloned.isCloned = true
|
||||
return cloned
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user