Explorar el Código

fix(runtime-dom): remove class attribute on nullish values

close #3173
Evan You hace 5 años
padre
commit
7013e8f578
Se han modificado 1 ficheros con 12 adiciones y 13 borrados
  1. 12 13
      packages/runtime-dom/src/modules/class.ts

+ 12 - 13
packages/runtime-dom/src/modules/class.ts

@@ -3,22 +3,21 @@ import { ElementWithTransition } from '../components/Transition'
 // compiler should normalize class + :class bindings on the same element
 // into a single binding ['staticClass', dynamic]
 export function patchClass(el: Element, value: string | null, isSVG: boolean) {
-  if (value == null) {
-    value = ''
+  // directly setting className should be faster than setAttribute in theory
+  // if this is an element during a transition, take the temporary transition
+  // classes into account.
+  const transitionClasses = (el as ElementWithTransition)._vtc
+  if (transitionClasses) {
+    value = (value
+      ? [value, ...transitionClasses]
+      : [...transitionClasses]
+    ).join(' ')
   }
-  if (isSVG) {
+  if (value == null) {
+    el.removeAttribute('class')
+  } else if (isSVG) {
     el.setAttribute('class', value)
   } else {
-    // directly setting className should be faster than setAttribute in theory
-    // if this is an element during a transition, take the temporary transition
-    // classes into account.
-    const transitionClasses = (el as ElementWithTransition)._vtc
-    if (transitionClasses) {
-      value = (value
-        ? [value, ...transitionClasses]
-        : [...transitionClasses]
-      ).join(' ')
-    }
     el.className = value
   }
 }