feat(vModel): handle true-value and false-value for checkbox (#449)
This commit is contained in:
committed by
Evan You
parent
0ef999bef1
commit
fe66194a77
@@ -101,7 +101,7 @@ export const vModelCheckbox: ObjectDirective<HTMLInputElement> = {
|
||||
assign(filtered)
|
||||
}
|
||||
} else {
|
||||
assign(checked)
|
||||
assign(getCheckboxValue(el, checked))
|
||||
}
|
||||
})
|
||||
},
|
||||
@@ -119,7 +119,7 @@ function setChecked(
|
||||
if (isArray(value)) {
|
||||
el.checked = looseIndexOf(value, vnode.props!.value) > -1
|
||||
} else if (value !== oldValue) {
|
||||
el.checked = !!value
|
||||
el.checked = looseEqual(value, getCheckboxValue(el, true))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -228,6 +228,15 @@ function getValue(el: HTMLOptionElement | HTMLInputElement) {
|
||||
return '_value' in el ? (el as any)._value : el.value
|
||||
}
|
||||
|
||||
// retrieve raw value for true-value and false-value set via :true-value or :false-value bindings
|
||||
function getCheckboxValue(
|
||||
el: HTMLInputElement & { _trueValue?: any; _falseValue?: any },
|
||||
checked: boolean
|
||||
) {
|
||||
const key = checked ? '_trueValue' : '_falseValue'
|
||||
return key in el ? el[key] : checked
|
||||
}
|
||||
|
||||
export const vModelDynamic: ObjectDirective<
|
||||
HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement
|
||||
> = {
|
||||
|
||||
Reference in New Issue
Block a user