From d73a508a73c03d64cea0c376e25f4f0272728a18 Mon Sep 17 00:00:00 2001 From: underfin <2218301630@qq.com> Date: Mon, 18 May 2020 22:09:10 +0800 Subject: [PATCH] fix(Transition): fix validate duration (#1188) --- packages/runtime-dom/src/components/Transition.ts | 10 +++++----- packages/runtime-dom/src/directives/vModel.ts | 13 +++++++------ packages/shared/src/index.ts | 5 +++++ 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/packages/runtime-dom/src/components/Transition.ts b/packages/runtime-dom/src/components/Transition.ts index c2d52dc0201..20e18f832e8 100644 --- a/packages/runtime-dom/src/components/Transition.ts +++ b/packages/runtime-dom/src/components/Transition.ts @@ -7,7 +7,7 @@ import { getCurrentInstance, callWithAsyncErrorHandling } from '@vue/runtime-core' -import { isObject } from '@vue/shared' +import { isObject, toNumber } from '@vue/shared' import { ErrorCodes } from 'packages/runtime-core/src/errorHandling' const TRANSITION = 'transition' @@ -165,15 +165,15 @@ function normalizeDuration( if (duration == null) { return null } else if (isObject(duration)) { - return [toNumber(duration.enter), toNumber(duration.leave)] + return [NumberOf(duration.enter), NumberOf(duration.leave)] } else { - const n = toNumber(duration) + const n = NumberOf(duration) return [n, n] } } -function toNumber(val: unknown): number { - const res = Number(val || 0) +function NumberOf(val: unknown): number { + const res = toNumber(val) if (__DEV__) validateDuration(res) return res } diff --git a/packages/runtime-dom/src/directives/vModel.ts b/packages/runtime-dom/src/directives/vModel.ts index 090f27ce1a3..2bc4287a533 100644 --- a/packages/runtime-dom/src/directives/vModel.ts +++ b/packages/runtime-dom/src/directives/vModel.ts @@ -6,7 +6,13 @@ import { warn } from '@vue/runtime-core' import { addEventListener } from '../modules/events' -import { isArray, looseEqual, looseIndexOf, invokeArrayFns } from '@vue/shared' +import { + isArray, + looseEqual, + looseIndexOf, + invokeArrayFns, + toNumber +} from '@vue/shared' type AssignerFn = (value: any) => void @@ -33,11 +39,6 @@ function trigger(el: HTMLElement, type: string) { el.dispatchEvent(e) } -function toNumber(val: string): number | string { - const n = parseFloat(val) - return isNaN(n) ? val : n -} - type ModelDirective = ObjectDirective // We are exporting the v-model runtime directly as vnode hooks so that it can diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 066132c8a9a..8d67e586d57 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -125,3 +125,8 @@ export const def = (obj: object, key: string | symbol, value: any) => { value }) } + +export const toNumber = (val: any): any => { + const n = parseFloat(val) + return isNaN(n) ? val : n +}