Explorar el Código

test(vapor): v-model runtime tests

Evan You hace 1 año
padre
commit
1f25e0d863

+ 9 - 2
packages/runtime-dom/src/directives/vModel.ts

@@ -90,7 +90,7 @@ export const vModelTextInit = (
     if (trim) {
       domValue = domValue.trim()
     }
-    if (number) {
+    if (number || el.type === 'number') {
       domValue = looseToNumber(domValue)
     }
     ;(set || (el as any)[assignKey])(domValue)
@@ -359,7 +359,14 @@ function getCheckboxValue(
   checked: boolean,
 ) {
   const key = checked ? '_trueValue' : '_falseValue'
-  return key in el ? el[key] : checked
+  if (key in el) {
+    return el[key]
+  }
+  const attr = checked ? 'true-value' : 'false-value'
+  if (el.hasAttribute(attr)) {
+    return el.getAttribute(attr)
+  }
+  return checked
 }
 
 export const vModelDynamic: ObjectDirective<

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 321 - 377
packages/runtime-vapor/__tests__/directives/vModel.spec.ts


+ 10 - 0
packages/runtime-vapor/src/dom/prop.ts

@@ -47,6 +47,16 @@ export function setAttr(el: any, key: string, value: any): void {
     return
   }
 
+  // special case for <input v-model type="checkbox"> with
+  // :true-value & :false-value
+  // store value as dom properties since non-string values will be
+  // stringified.
+  if (key === 'true-value') {
+    ;(el as any)._trueValue = value
+  } else if (key === 'false-value') {
+    ;(el as any)._falseValue = value
+  }
+
   if (value !== el[`$${key}`]) {
     el[`$${key}`] = value
     if (value != null) {

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio