Quellcode durchsuchen

fix(v-model): handle trailing whitespaces in expression (#7737)

Eduardo San Martin Morote vor 8 Jahren
Ursprung
Commit
db584931e2

+ 5 - 2
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) {

+ 15 - 0
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: '<input v-model="obj.test ">'
+    }).$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: {