Evan You 10 лет назад
Родитель
Сommit
73bc99e30b

+ 4 - 2
src/platforms/web/server/create-renderer.js

@@ -33,7 +33,9 @@ export function createComponentRenderer (options = {}) {
     if (isUnaryTag(el.tag)) {
       return startTag
     } else {
-      const children = el.children.map(renderNode).join('')
+      const children = el.children
+        ? el.children.map(renderNode).join('')
+        : ''
       return startTag + children + `</${el.tag}>`
     }
   }
@@ -57,7 +59,7 @@ export function createComponentRenderer (options = {}) {
       for (let key in node.data) {
         let renderer = modules[key]
         if (renderer) {
-          markup += ' ' + renderer(node.data[key])
+          markup += renderer(node)
         }
       }
     }

+ 16 - 1
src/platforms/web/server/modules/attrs.js

@@ -1,3 +1,18 @@
-export default function renderAttrs () {
+import { isBooleanAttr, isEnumeratedAttr } from 'web/util/index'
 
+export default function renderAttrs (node) {
+  const attrs = node.data.attrs
+  let res = ''
+  for (let key in attrs) {
+    if (attrs[key] != null) {
+      if (isBooleanAttr(key)) {
+        res += ` ${key}="${key}"`
+      } else if (isEnumeratedAttr(key)) {
+        res += ` ${key}="true"`
+      } else {
+        res += ` ${key}="${attrs[key]}"`
+      }
+    }
+  }
+  return res
 }

+ 3 - 1
src/platforms/web/server/modules/class.js

@@ -1,3 +1,5 @@
-export default function renderClass () {
+import { genClassForVnode } from 'web/util/index'
 
+export default function renderClass (node) {
+  return ` class="${genClassForVnode(node)}"`
 }

+ 3 - 2
src/platforms/web/server/modules/style.js

@@ -1,7 +1,8 @@
 import { hyphenate } from 'shared/util'
 
-export default function renderStyle (styles) {
-  let res = 'style="'
+export default function renderStyle (node) {
+  const styles = node.data.style
+  let res = ' style="'
   for (let key in styles) {
     res += `${hyphenate(key)}:${styles[key]};`
   }