Browse Source

fix: v-bind object should be overridable by single bindings (#9653)

fix #9641
dev
GU Yiling 6 years ago
committed by Evan You
parent
commit
0b57380f10
  1. 8
      src/core/instance/render-helpers/bind-object-props.js
  2. 5
      test/unit/features/directives/bind.spec.js

8
src/core/instance/render-helpers/bind-object-props.js

@ -7,7 +7,8 @@ import {
isObject,
toObject,
isReservedAttribute,
camelize
camelize,
hyphenate
} from 'core/util/index'
/**
@ -45,12 +46,13 @@ export function bindObjectProps (
: data.attrs || (data.attrs = {})
}
const camelizedKey = camelize(key)
if (!(key in hash) && !(camelizedKey in hash)) {
const hyphenatedKey = hyphenate(key)
if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
hash[key] = value[key]
if (isSync) {
const on = data.on || (data.on = {})
on[`update:${camelizedKey}`] = function ($event) {
on[`update:${key}`] = function ($event) {
value[key] = $event
}
}

5
test/unit/features/directives/bind.spec.js

@ -234,7 +234,7 @@ describe('Directive v-bind', () => {
template: `<test v-bind="test" data-foo="foo" dataBar="bar"/>`,
components: {
test: {
template: '<div :data-foo="dataFoo" :data-bar="dataBar"></div>',
template: '<div>{{ dataFoo }} {{ dataBar }}</div>',
props: ['dataFoo', 'dataBar']
}
},
@ -245,8 +245,7 @@ describe('Directive v-bind', () => {
}
}
}).$mount()
expect(vm.$el.getAttribute('data-foo')).toBe('foo')
expect(vm.$el.getAttribute('data-bar')).toBe('bar')
expect(vm.$el.textContent).toBe('foo bar')
})
it('.sync modifier with bind object', done => {

Loading…
Cancel
Save