Pārlūkot izejas kodu

fix v-html/v-text on root element

Evan You 9 gadi atpakaļ
vecāks
revīzija
41acdc0ff1

+ 1 - 2
src/server/optimizing-compiler/optimizer.js

@@ -60,8 +60,7 @@ function walk (node: ASTNode, isRoot?: boolean) {
       }
     }
     if (node.ssrOptimizability == null ||
-      node.attrsMap['v-html'] ||
-      node.attrsMap['v-text']
+      (!isRoot && (node.attrsMap['v-html'] || node.attrsMap['v-text']))
     ) {
       node.ssrOptimizability = optimizability.FULL
     } else {

+ 26 - 2
test/ssr/ssr-string.spec.js

@@ -338,7 +338,7 @@ describe('SSR: renderToString', () => {
     })
   })
 
-  it('v-html', done => {
+  it('v-html on root', done => {
     renderVmWithOptions({
       template: '<div v-html="text"></div>',
       data: {
@@ -350,7 +350,7 @@ describe('SSR: renderToString', () => {
     })
   })
 
-  it('v-text', done => {
+  it('v-text on root', done => {
     renderVmWithOptions({
       template: '<div v-text="text"></div>',
       data: {
@@ -362,6 +362,30 @@ describe('SSR: renderToString', () => {
     })
   })
 
+  it('v-html', done => {
+    renderVmWithOptions({
+      template: '<div><div v-html="text"></div></div>',
+      data: {
+        text: '<span>foo</span>'
+      }
+    }, result => {
+      expect(result).toContain('<div data-server-rendered="true"><div><span>foo</span></div></div>')
+      done()
+    })
+  })
+
+  it('v-text', done => {
+    renderVmWithOptions({
+      template: '<div><div v-text="text"></div></div>',
+      data: {
+        text: '<span>foo</span>'
+      }
+    }, result => {
+      expect(result).toContain('<div data-server-rendered="true"><div>&lt;span&gt;foo&lt;/span&gt;</div></div>')
+      done()
+    })
+  })
+
   it('child component (hoc)', done => {
     renderVmWithOptions({
       template: '<child class="foo" :msg="msg"></child>',