@@ -15,6 +15,7 @@ import {
15
15
16
16
import {
17
17
resolveAsyncComponent ,
18
+ createAsyncPlaceholder ,
18
19
extractPropsFromVNodeData
19
20
} from './helpers/index'
20
21
@@ -122,22 +123,24 @@ export function createComponent (
122
123
return
123
124
}
124
125
126
+ data = data || { }
127
+
125
128
// async component
129
+ let asyncFactory
126
130
if ( isUndef ( Ctor . cid ) ) {
127
- Ctor = resolveAsyncComponent ( Ctor , baseCtor , context )
131
+ asyncFactory = Ctor
132
+ Ctor = resolveAsyncComponent ( asyncFactory , baseCtor , context )
128
133
if ( Ctor === undefined ) {
129
134
// return nothing if this is indeed an async component
130
135
// wait for the callback to trigger parent update.
131
- return
136
+ return createAsyncPlaceholder ( asyncFactory , data . key )
132
137
}
133
138
}
134
139
135
140
// resolve constructor options in case global mixins are applied after
136
141
// component constructor creation
137
142
resolveConstructorOptions ( Ctor )
138
143
139
- data = data || { }
140
-
141
144
// transform component v-model data into props & events
142
145
if ( isDef ( data . model ) ) {
143
146
transformModel ( Ctor . options , data )
@@ -171,7 +174,8 @@ export function createComponent (
171
174
const vnode = new VNode (
172
175
`vue-component-${ Ctor . cid } ${ name ? `-${ name } ` : '' } ` ,
173
176
data , undefined , undefined , undefined , context ,
174
- { Ctor, propsData, listeners, tag, children }
177
+ { Ctor, propsData, listeners, tag, children } ,
178
+ asyncFactory
175
179
)
176
180
return vnode
177
181
}
0 commit comments