Просмотр исходного кода

fix object dot notation bug (fix #4185) (#4188)

* fix object dot notation bug

* add test case
chengchao 9 лет назад
Родитель
Сommit
46b3bcd707
2 измененных файлов с 13 добавлено и 1 удалено
  1. 1 1
      src/compiler/helpers.js
  2. 12 0
      test/unit/features/directives/model-parse.spec.js

+ 1 - 1
src/compiler/helpers.js

@@ -116,7 +116,7 @@ export function parseModel (val: string): Object {
   len = str.length
   index = expressionPos = expressionEndPos = 0
 
-  if (val.indexOf('[') < 0) {
+  if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
     return {
       exp: val,
       idx: null

+ 12 - 0
test/unit/features/directives/model-parse.spec.js

@@ -1,12 +1,24 @@
 import { parseModel } from 'compiler/helpers'
 
 describe('model expression parser', () => {
+  it('parse object dot notation', () => {
+    const res = parseModel('a.b.c')
+    expect(res.exp).toBe('a.b.c')
+    expect(res.idx).toBe(null)
+  })
+
   it('parse string in brackets', () => {
     const res = parseModel('a["b"][c]')
     expect(res.exp).toBe('a["b"]')
     expect(res.idx).toBe('c')
   })
 
+  it('parse brackets with object dot notation', () => {
+    const res = parseModel('a["b"][c].xxx')
+    expect(res.exp).toBe('a["b"][c].xxx')
+    expect(res.idx).toBe(null)
+  })
+
   it('parse nested brackets', () => {
     const res = parseModel('a[i[c]]')
     expect(res.exp).toBe('a')