diff --git a/src/core/instance/render-helpers/render-list.js b/src/core/instance/render-helpers/render-list.js index abe99db4d6d..040391c0f30 100644 --- a/src/core/instance/render-helpers/render-list.js +++ b/src/core/instance/render-helpers/render-list.js @@ -32,8 +32,9 @@ export function renderList ( ret[i] = render(val[key], key, i) } } - if (isDef(ret)) { - (ret: any)._isVList = true + if (!isDef(ret)) { + ret = [] } + (ret: any)._isVList = true return ret } diff --git a/test/unit/features/component/component.spec.js b/test/unit/features/component/component.spec.js index 34c037a1e74..44fa094a045 100644 --- a/test/unit/features/component/component.spec.js +++ b/test/unit/features/component/component.spec.js @@ -186,6 +186,50 @@ describe('Component', () => { }).then(done) }) + it('components with v-for and empty list', done => { + const vm = new Vue({ + template: + '
' + + '{{ item }}' + + '
', + data: { + list: undefined + }, + components: { + foo: { + template: '
' + }, + } + }).$mount() + expect(vm.$el.innerHTML).toBe('') + vm.list = [1, 2, 3] + waitForUpdate(() => { + expect(vm.$el.innerHTML).toBe('
1
2
3
') + }).then(done) + }) + + it('components with v-for and empty list, root element has no attrs', done => { + const vm = new Vue({ + template: + '
' + + '{{ item }}' + + '
', + data: { + list: undefined + }, + components: { + foo: { + template: '
' + }, + } + }).$mount() + expect(vm.$el.innerHTML).toBe('') + vm.list = [1, 2, 3] + waitForUpdate(() => { + expect(vm.$el.innerHTML).toBe('
1
2
3
') + }).then(done) + }) + it('dynamic elements with domProps', done => { const vm = new Vue({ template: '',