From fdcd457753bddfef0cfcf8fde89d5f0d32498bc4 Mon Sep 17 00:00:00 2001 From: Bogdan Luca Date: Tue, 5 Feb 2019 00:43:48 +0200 Subject: [PATCH] fix(v-model): add value to $attrs if not defined in props (#9331) fix #9330 --- src/core/vdom/create-component.js | 3 ++- .../directives/model-component.spec.js | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/core/vdom/create-component.js b/src/core/vdom/create-component.js index b769fa1e19d..60bb258e519 100644 --- a/src/core/vdom/create-component.js +++ b/src/core/vdom/create-component.js @@ -250,7 +250,8 @@ function mergeHook (f1: any, f2: any): Function { function transformModel (options, data: any) { const prop = (options.model && options.model.prop) || 'value' const event = (options.model && options.model.event) || 'input' - ;(data.props || (data.props = {}))[prop] = data.model.value + const addTo = (options.props && prop in options.props) ? 'props' : 'attrs' + ;(data[addTo] || (data[addTo] = {}))[prop] = data.model.value const on = data.on || (data.on = {}) const existing = on[event] const callback = data.model.callback diff --git a/test/unit/features/directives/model-component.spec.js b/test/unit/features/directives/model-component.spec.js index 9f9536ada09..49ff4ddb138 100644 --- a/test/unit/features/directives/model-component.spec.js +++ b/test/unit/features/directives/model-component.spec.js @@ -204,4 +204,30 @@ describe('Directive v-model component', () => { expect(triggerCount).toBe(1) document.body.removeChild(vm.$el) }) + + // #9330 + it('should add value to $attrs if not defined in props', () => { + const TestComponent = { + inheritAttrs: false, + render (h) { + return h('div', this.$attrs.value) + } + } + + const vm = new Vue({ + components: { + TestComponent + }, + template: ` +
+ +
+ `, + data: { + val: 'foo' + } + }).$mount() + + expect(vm.$el.innerHTML).toBe('
foo
'); + }) })