UNPKG

vue

Version:

Reactive, component-oriented view layer for modern web interfaces.

40 lines (35 loc) 1.11 kB
/* @flow */ import { addHandler, addAttr, parseModel } from 'compiler/helpers' export default function model ( el: ASTElement, dir: ASTDirective, _warn: Function ): ?boolean { genDefaultModel(el, dir.value, dir.modifiers) } function genDefaultModel ( el: ASTElement, value: string, modifiers: ?ASTModifiers ): ?boolean { const { lazy, trim } = modifiers || {} const event = lazy ? 'change' : 'input' const isNative = el.tag === 'input' || el.tag === 'textarea' const valueExpression = isNative ? `$event.target.attr.value${trim ? '.trim()' : ''}` : `$event` const code = genAssignmentCode(value, valueExpression) addAttr(el, 'value', `(${value})`) addHandler(el, event, code, null, true) } function genAssignmentCode (value: string, assignment: string): string { const modelRs = parseModel(value) if (modelRs.idx === null) { return `${value}=${assignment}` } else { return `var $$exp = ${modelRs.exp}, $$idx = ${modelRs.idx};` + `if (!Array.isArray($$exp)){` + `${value}=${assignment}}` + `else{$$exp.splice($$idx, 1, ${assignment})}` } }