const assignKey: unique symbol = Symbol('_assign')
type ModelDirective<T, Modifiers extends string = string> = ObjectDirective<
- T & { [assignKey]: AssignerFn; _assigning?: boolean },
+ T & { [assignKey]: AssignerFn; _assigning?: boolean; _initialValue?: any },
any,
Modifiers
>
'trim' | 'number' | 'lazy'
> = {
created(el, { modifiers: { lazy, trim, number } }, vnode) {
+ el._initialValue = el.value
el[assignKey] = getModelAssigner(vnode)
const castToNumber =
number || (vnode.props && vnode.props.type === 'number')
},
// set value on mounted so it's after min/max for type="range"
mounted(el, { value }) {
+ if (el._initialValue !== el.value) return
el.value = value == null ? '' : value
},
beforeUpdate(
deep: true,
created(el, _, vnode) {
el[assignKey] = getModelAssigner(vnode)
+ el._initialValue = el.checked
addEventListener(el, 'change', () => {
const modelValue = (el as any)._modelValue
const elementValue = getValue(el)
})
},
// set initial checked on mount to wait for true-value/false-value
- mounted: setChecked,
+ mounted(el, binding, vnode) {
+ if (el._initialValue !== el.checked) return
+ setChecked(el, binding, vnode)
+ },
beforeUpdate(el, binding, vnode) {
el[assignKey] = getModelAssigner(vnode)
setChecked(el, binding, vnode)