|
|
@@ -118,11 +118,13 @@ export const vModelCheckbox: ModelDirective<HTMLInputElement> = {
|
|
|
assign(filtered)
|
|
|
}
|
|
|
} else if (isSet(modelValue)) {
|
|
|
+ const cloned = new Set(modelValue)
|
|
|
if (checked) {
|
|
|
- modelValue.add(elementValue)
|
|
|
+ cloned.add(elementValue)
|
|
|
} else {
|
|
|
- modelValue.delete(elementValue)
|
|
|
+ cloned.delete(elementValue)
|
|
|
}
|
|
|
+ assign(cloned)
|
|
|
} else {
|
|
|
assign(getCheckboxValue(el, checked))
|
|
|
}
|
|
|
@@ -168,7 +170,8 @@ export const vModelRadio: ModelDirective<HTMLInputElement> = {
|
|
|
}
|
|
|
|
|
|
export const vModelSelect: ModelDirective<HTMLSelectElement> = {
|
|
|
- created(el, { modifiers: { number } }, vnode) {
|
|
|
+ created(el, { value, modifiers: { number } }, vnode) {
|
|
|
+ const isSetModel = isSet(value)
|
|
|
addEventListener(el, 'change', () => {
|
|
|
const selectedVal = Array.prototype.filter
|
|
|
.call(el.options, (o: HTMLOptionElement) => o.selected)
|
|
|
@@ -176,7 +179,13 @@ export const vModelSelect: ModelDirective<HTMLSelectElement> = {
|
|
|
(o: HTMLOptionElement) =>
|
|
|
number ? toNumber(getValue(o)) : getValue(o)
|
|
|
)
|
|
|
- el._assign(el.multiple ? selectedVal : selectedVal[0])
|
|
|
+ el._assign(
|
|
|
+ el.multiple
|
|
|
+ ? isSetModel
|
|
|
+ ? new Set(selectedVal)
|
|
|
+ : selectedVal
|
|
|
+ : selectedVal[0]
|
|
|
+ )
|
|
|
})
|
|
|
el._assign = getModelAssigner(vnode)
|
|
|
},
|