create-element.js 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. import VNode from './vnode'
  2. import config from '../config'
  3. import { createComponent } from './create-component'
  4. import { flatten } from './helpers'
  5. import { renderState } from '../instance/render'
  6. import { warn, resolveAsset } from '../util/index'
  7. export default function createElement (tag, data, children, namespace) {
  8. const context = this
  9. const parent = renderState.activeInstance
  10. if (typeof tag === 'string') {
  11. let Ctor
  12. if (config.isReservedTag(tag)) {
  13. return VNode(tag, data, flatten(children), undefined, undefined, namespace)
  14. } else if ((Ctor = resolveAsset(context.$options, 'components', tag))) {
  15. return createComponent(Ctor, data, parent, children)
  16. } else {
  17. if (process.env.NODE_ENV !== 'production') {
  18. if (!namespace && config.isUnknownElement(tag)) {
  19. warn(
  20. 'Unknown custom element: <' + tag + '> - did you ' +
  21. 'register the component correctly? For recursive components, ' +
  22. 'make sure to provide the "name" option.'
  23. )
  24. }
  25. }
  26. return VNode(tag, data, flatten(children && children()), undefined, undefined, namespace)
  27. }
  28. } else {
  29. return createComponent(tag, data, parent, children)
  30. }
  31. }