소스 검색

test(vapor): v-model runtime tests

Evan You 1 년 전
부모
커밋
1f25e0d863
3개의 변경된 파일340개의 추가작업 그리고 379개의 파일을 삭제
  1. 9 2
      packages/runtime-dom/src/directives/vModel.ts
  2. 321 377
      packages/runtime-vapor/__tests__/directives/vModel.spec.ts
  3. 10 0
      packages/runtime-vapor/src/dom/prop.ts

+ 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<

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 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) {

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.