Jelajahi Sumber

fix v-if false rendering

Evan You 9 tahun lalu
induk
melakukan
f061d802d3
2 mengubah file dengan 29 tambahan dan 1 penghapusan
  1. 1 1
      src/server/optimizing-compiler/codegen.js
  2. 28 0
      test/ssr/ssr-string.spec.js

+ 1 - 1
src/server/optimizing-compiler/codegen.js

@@ -135,7 +135,7 @@ function elementToSegments (el, state): Array<StringSegment> {
     el.ifProcessed = true
     return [{
       type: EXPRESSION,
-      value: genIf(el, state, elementToString, '""')
+      value: genIf(el, state, elementToString, '"<!---->"')
     }]
   } else if (el.tag === 'template') {
     return childrenToSegments(el, state)

+ 28 - 0
test/ssr/ssr-string.spec.js

@@ -818,6 +818,34 @@ describe('SSR: renderToString', () => {
     })
   })
 
+  it('v-if', done => {
+    renderVmWithOptions({
+      template: `
+        <div>
+          <span v-if="true">foo</span>
+          <span v-if="false">bar</span>
+        </div>
+      `
+    }, res => {
+      expect(res).toContain(`<div data-server-rendered="true"><span>foo</span> <!----></div>`)
+      done()
+    })
+  })
+
+  it('v-for', done => {
+    renderVmWithOptions({
+      template: `
+        <div>
+          <span>foo</span>
+          <span v-for="i in 2">{{ i }}</span>
+        </div>
+      `
+    }, res => {
+      expect(res).toContain(`<div data-server-rendered="true"><span>foo</span> <span>1</span><span>2</span></div>`)
+      done()
+    })
+  })
+
   it('template v-if', done => {
     renderVmWithOptions({
       template: `