diff --git a/README.md b/README.md index f302a3fc5..25a5ada78 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,7 @@ PR are welcome! - [x] modifiers - [x] runtime directives - [ ] `v-memo` [on hold] - - [ ] `v-model` - - [x] text field + - [x] `v-model` - [x] `v-if` / `v-else` / `v-else-if` - [ ] `v-for` - [x] basic diff --git a/packages/runtime-vapor/src/directives/vModel.ts b/packages/runtime-vapor/src/directives/vModel.ts index b5acb8803..4e940285c 100644 --- a/packages/runtime-vapor/src/directives/vModel.ts +++ b/packages/runtime-vapor/src/directives/vModel.ts @@ -115,8 +115,21 @@ export const vModelText: ObjectDirective< }, } -// TODO -export const vModelRadio = {} +export const vModelRadio: ObjectDirective = { + beforeMount(el, { value, instance }) { + el.checked = looseEqual(value, getValue(el, instance)) + assignFnMap.set(el, getModelAssigner(el, instance)) + addEventListener(el, 'change', () => { + assignFnMap.get(el)!(getValue(el, instance)) + }) + }, + beforeUpdate(el, { value, oldValue, instance }) { + assignFnMap.set(el, getModelAssigner(el, instance)) + if (value !== oldValue) { + el.checked = looseEqual(value, getValue(el, instance)) + } + }, +} export const vModelSelect: ObjectDirective = { //