diff --git a/src/core/instance/render-helpers/bind-object-props.js b/src/core/instance/render-helpers/bind-object-props.js
index c71dce5c4c2..9a7b46dfa95 100644
--- a/src/core/instance/render-helpers/bind-object-props.js
+++ b/src/core/instance/render-helpers/bind-object-props.js
@@ -6,7 +6,8 @@ import {
warn,
isObject,
toObject,
- isReservedAttribute
+ isReservedAttribute,
+ camelize
} from 'core/util/index'
/**
@@ -43,12 +44,13 @@ export function bindObjectProps (
? data.domProps || (data.domProps = {})
: data.attrs || (data.attrs = {})
}
- if (!(key in hash)) {
+ const camelizedKey = camelize(key)
+ if (!(key in hash) && !(camelizedKey in hash)) {
hash[key] = value[key]
if (isSync) {
const on = data.on || (data.on = {})
- on[`update:${key}`] = function ($event) {
+ on[`update:${camelizedKey}`] = function ($event) {
value[key] = $event
}
}
diff --git a/test/unit/features/directives/bind.spec.js b/test/unit/features/directives/bind.spec.js
index e9ab1bf7361..07d0704bf2d 100644
--- a/test/unit/features/directives/bind.spec.js
+++ b/test/unit/features/directives/bind.spec.js
@@ -187,6 +187,26 @@ describe('Directive v-bind', () => {
}).then(done)
})
+ it('bind object with explicit overrides', () => {
+ const vm = new Vue({
+ template: `