wip(compiler-dom): v-model runtime

This commit is contained in:
Evan You
2019-10-10 18:02:51 -04:00
parent 145559e170
commit d376439167
21 changed files with 245 additions and 95 deletions

View File

@@ -0,0 +1,40 @@
import { Directive } from '@vue/runtime-core'
// We are exporting the v-model runtime directly as vnode hooks so that it can
// be tree-shaken in case v-model is never used.
export const vModelText: Directive = {
beforeMount(el, binding) {
el.value = binding.value
},
mounted(el, binding, vnode) {},
beforeUpdate(el, binding, vnode, prevVNode) {},
updated(el, binding, vnode) {}
}
export const vModelRadio: Directive = {
beforeMount(el, binding, vnode) {},
mounted(el, binding, vnode) {},
beforeUpdate(el, binding, vnode, prevVNode) {},
updated(el, binding, vnode) {}
}
export const vModelCheckbox: Directive = {
beforeMount(el, binding, vnode) {},
mounted(el, binding, vnode) {},
beforeUpdate(el, binding, vnode, prevVNode) {},
updated(el, binding, vnode) {}
}
export const vModelSelect: Directive = {
beforeMount(el, binding, vnode) {},
mounted(el, binding, vnode) {},
beforeUpdate(el, binding, vnode, prevVNode) {},
updated(el, binding, vnode) {}
}
export const vModelDynamic: Directive = {
beforeMount(el, binding, vnode) {},
mounted(el, binding, vnode) {},
beforeUpdate(el, binding, vnode, prevVNode) {},
updated(el, binding, vnode) {}
}

View File

@@ -9,10 +9,20 @@ const { render, createApp } = createRenderer<Node, Element>({
export { render, createApp }
// DOM-only runtime helpers
export {
vModelText,
vModelCheckbox,
vModelRadio,
vModelSelect,
vModelDynamic
} from './directives/vModel'
// re-export everything from core
// h, Component, reactivity API, nextTick, flags & types
export * from '@vue/runtime-core'
// Type augmentations
export interface ComponentPublicInstance {
$el: Element
}

View File

@@ -29,6 +29,10 @@ export function patchProp(
case 'style':
patchStyle(el, prevValue, nextValue)
break
case 'modelValue':
case 'onUpdate:modelValue':
// Do nothing. This is handled by v-model directives.
break
default:
if (isOn(key)) {
patchEvent(