From 5f8972964681d6a064a3f1c88848a1b5b14b2bb2 Mon Sep 17 00:00:00 2001 From: xujiongbo Date: Tue, 5 Sep 2017 11:56:44 +0800 Subject: [PATCH 1/2] fix: render SVGAElement inside a component correctly --- src/core/vdom/create-element.js | 5 +++-- test/unit/modules/vdom/create-element.spec.js | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/core/vdom/create-element.js b/src/core/vdom/create-element.js index 783cfa7127b..e67308b208f 100644 --- a/src/core/vdom/create-element.js +++ b/src/core/vdom/create-element.js @@ -88,10 +88,11 @@ export function _createElement ( } else if (normalizationType === SIMPLE_NORMALIZE) { children = simpleNormalizeChildren(children) } - let vnode, ns + let vnode + let ns = context.$vnode && context.$vnode.ns if (typeof tag === 'string') { let Ctor - ns = config.getTagNamespace(tag) + if (!ns) 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: { From 3608e216dc6091e46ac00947a8f6cae0182cdb18 Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 5 Sep 2017 15:05:58 -0400 Subject: [PATCH 2/2] small tweak --- src/core/vdom/create-element.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/core/vdom/create-element.js b/src/core/vdom/create-element.js index e67308b208f..c9f30d2287e 100644 --- a/src/core/vdom/create-element.js +++ b/src/core/vdom/create-element.js @@ -88,11 +88,10 @@ export function _createElement ( } else if (normalizationType === SIMPLE_NORMALIZE) { children = simpleNormalizeChildren(children) } - let vnode - let ns = context.$vnode && context.$vnode.ns + let vnode, ns if (typeof tag === 'string') { let Ctor - if (!ns) ns = config.getTagNamespace(tag) + ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag) if (config.isReservedTag(tag)) { // platform built-in elements vnode = new VNode(