diff --git a/src/core/vdom/create-element.js b/src/core/vdom/create-element.js index 783cfa7127b..c9f30d2287e 100644 --- a/src/core/vdom/create-element.js +++ b/src/core/vdom/create-element.js @@ -91,7 +91,7 @@ export function _createElement ( let vnode, ns if (typeof tag === 'string') { let Ctor - ns = config.getTagNamespace(tag) + ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag) if (config.isReservedTag(tag)) { // platform built-in elements vnode = new VNode( diff --git a/test/unit/modules/vdom/create-element.spec.js b/test/unit/modules/vdom/create-element.spec.js index e2e8ce27a6d..c060343df19 100644 --- a/test/unit/modules/vdom/create-element.spec.js +++ b/test/unit/modules/vdom/create-element.spec.js @@ -141,6 +141,24 @@ describe('create-element', () => { expect(vnode.children[0].children[0].ns).toBeUndefined() }) + // #6506 + it('render SVGAElement in a component correctly', () => { + const vm = new Vue({ + template: ` + + + + `, + components: { + test: { render: h => h('a') } + } + }).$mount() + const testComp = vm.$children[0] + expect(testComp.$vnode.ns).toBe('svg') + expect(testComp._vnode.tag).toBe('a') + expect(testComp._vnode.ns).toBe('svg') + }) + it('warn observed data objects', () => { new Vue({ data: {