Skip to content

<template> tag which inside v-pre directive, will be ignore if v-pre doesn't use at staticRoot #10717

Open
@cutPicturesMan

Description

@cutPicturesMan

Version

2.6.10

Reproduction link

https://jsfiddle.net/vuetest/c5uw870y/3/

Steps to reproduce

1、click jsfiddle link
2、you will see result is {{msg}},is incorrect

What is expected?

render template tag as html element, dom looks like that:

<div>
  <p>
    <template>
      #document-fragment
      <span>{{msg}}</span>
    </template>
  </p>
</div>

What is actually happening?

template tag disappeared

<div>
  <p>
    <span>{{msg}}</span>
  </p>
</div>

when v-pre used at the staticRoot, template render correctly, fixed by #8146. see this also: https://jsfiddle.net/vuetest/c5uw870y/5/

when v-pre does not used at the staticRoot, template tag will be skip, source code in vue/src/compiler/codegen/index.js is:

export function genElement (el: ASTElement, state: CodegenState): string {
  // ...
  } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
    // template tag run into here, directively render it's children instead of him
    return genChildren(el, state) || 'void 0'
  } // ...

how to slove this problem:

export function genElement (el: ASTElement, state: CodegenState): string {
  if (el.parent) {
    el.pre = el.pre || el.parent.pre; 
    // add this line
    state.pre = el.pre;
  }

I'm not familiar with creating pr with test, someone else can help me?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions