)
}
+ if (dirs) {
+ invokeDirectiveHook(vnode, null, parentComponent, 'created')
+ }
// props
if (props) {
for (const key in props) {
invokeVNodeHook(vnodeHook, parentComponent, vnode)
}
}
- if (dirs) {
- invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount')
- }
-
// scopeId
if (scopeId) {
hostSetScopeId(el, scopeId)
hostSetScopeId(el, treeOwnerId + '-s')
}
}
+ if (dirs) {
+ invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount')
+ }
// #1583 For inside suspense + suspense not resolved case, enter hook should call when suspense resolved
// #1689 For inside suspense + suspense resolved case, just call it
const needCallTransitionHooks =
export const vModelText: ModelDirective<
HTMLInputElement | HTMLTextAreaElement
> = {
- beforeMount(el, { value, modifiers: { lazy, trim, number } }, vnode) {
+ created(el, { value, modifiers: { lazy, trim, number } }, vnode) {
el.value = value == null ? '' : value
el._assign = getModelAssigner(vnode)
const castToNumber = number || el.type === 'number'
}
export const vModelCheckbox: ModelDirective<HTMLInputElement> = {
- beforeMount(el, binding, vnode) {
+ created(el, binding, vnode) {
setChecked(el, binding, vnode)
el._assign = getModelAssigner(vnode)
addEventListener(el, 'change', () => {
}
export const vModelRadio: ModelDirective<HTMLInputElement> = {
- beforeMount(el, { value }, vnode) {
+ created(el, { value }, vnode) {
el.checked = looseEqual(value, vnode.props!.value)
el._assign = getModelAssigner(vnode)
addEventListener(el, 'change', () => {
}
export const vModelSelect: ModelDirective<HTMLSelectElement> = {
- // use mounted & updated because <select> relies on its children <option>s.
- mounted(el, { value }, vnode) {
- setSelected(el, value)
- el._assign = getModelAssigner(vnode)
+ created(el, binding, vnode) {
addEventListener(el, 'change', () => {
const selectedVal = Array.prototype.filter
.call(el.options, (o: HTMLOptionElement) => o.selected)
.map(getValue)
el._assign(el.multiple ? selectedVal : selectedVal[0])
})
+ el._assign = getModelAssigner(vnode)
+ },
+ // set value in mounted & updated because <select> relies on its children
+ // <option>s.
+ mounted(el, { value }) {
+ setSelected(el, value)
},
beforeUpdate(el, _binding, vnode) {
el._assign = getModelAssigner(vnode)
export const vModelDynamic: ObjectDirective<
HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement
> = {
- beforeMount(el, binding, vnode) {
- callModelHook(el, binding, vnode, null, 'beforeMount')
+ created(el, binding, vnode) {
+ callModelHook(el, binding, vnode, null, 'created')
},
mounted(el, binding, vnode) {
callModelHook(el, binding, vnode, null, 'mounted')
binding: DirectiveBinding,
vnode: VNode,
prevVNode: VNode | null,
- hook: 'beforeMount' | 'mounted' | 'beforeUpdate' | 'updated'
+ hook: keyof ObjectDirective
) {
let modelToUse: ObjectDirective
switch (el.tagName) {
modelToUse = vModelText
break
default:
- switch (el.type) {
+ switch (vnode.props && vnode.props.type) {
case 'checkbox':
modelToUse = vModelCheckbox
break