diff --git a/src/compiler/directives/model.js b/src/compiler/directives/model.js index 8c1f55bf663..39bdbfda4c2 100644 --- a/src/compiler/directives/model.js +++ b/src/compiler/directives/model.js @@ -15,8 +15,8 @@ export function genComponentModel ( if (trim) { valueExpression = `(typeof ${baseValueExpression} === 'string'` + - `? ${baseValueExpression}.trim()` + - `: ${baseValueExpression})` + `? ${baseValueExpression}.trim()` + + `: ${baseValueExpression})` } if (number) { valueExpression = `_n(${valueExpression})` @@ -68,6 +68,9 @@ type ModelParseResult = { } export function parseModel (val: string): ModelParseResult { + // Fix https://github.com/vuejs/vue/pull/7730 + // allow v-model="obj.val " (trailing whitespace) + val = val.trim() len = val.length if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) { diff --git a/test/unit/features/directives/model-text.spec.js b/test/unit/features/directives/model-text.spec.js index 7aae24b654e..e47fc93bbe9 100644 --- a/test/unit/features/directives/model-text.spec.js +++ b/test/unit/features/directives/model-text.spec.js @@ -19,6 +19,21 @@ describe('Directive v-model text', () => { }).then(done) }) + it('should work with space ended expression in v-model', () => { + const vm = new Vue({ + data: { + obj: { + test: 'b' + } + }, + template: '' + }).$mount() + + triggerEvent(vm.$el, 'input') + expect(vm.obj['test ']).toBe(undefined) + expect(vm.obj.test).toBe('b') + }) + it('.lazy modifier', () => { const vm = new Vue({ data: {