如何条件渲染模板标签上的vue.js?

时间:2018-05-12 11:09:27

标签: javascript vue.js

我通过Vue.js Reference Doc上的参考文档学习vue.js。

然后,我跟进了示例。但是,conditional部分例子不会起作用。

这是我的代码。

<template id="app-3">
<div v-if="ok">
    <h1>Title</h1>
    <p>Paragraph 1</p>
    <p>Paragraph 2</p>
</div>
</template>
<script src="vue.js"></script>
<script>
    var app = new Vue({
        el : '#app-3',
        data : {
            ok : true
        }
    });
</script>

这个代码很有用。

    <transition id="app-3">
    <template v-if="ok">
        <div>
            <h1>Title</h1>
            <p>Paragraph 1</p>
            <p>Paragraph 2</p>
        </div>
    </template>
</transition>
<script src="vue.js"></script>
<script>
    var app = new Vue({
        el : '#app-3',
        data : {
            ok : true
        }
    });
</script>

我想知道第一个代码为什么不起作用!

2 个答案:

答案 0 :(得分:2)

@xyiii指出了控制台中显示的错误。

正如您对@xyiii回答:

  

嗯,Vue.js Doc示例是错误的代码?

<强>都能跟得上即可。 它们只是解释了您希望根据相同属性切换多个元素的情况。

所以不要这样做:

标题   第1段

  第2段

您可以将它们分组到模板标签中并按照以下方式进行分组:

<template v-if="ok">
<h1>Title</h1>
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</template>

<template>标记就像一个占位符。它不会呈现给DOM。

所以你可以错误地将两个根元素作为:

<template v-if="ok">
    <div>Root element 1</div>
    <div>Root element 2</div>
</template>

所以为了防止这个vue抛出错误。

要知道为什么只有一个根元素结帐@ LinusBorg评论here

答案 1 :(得分:1)

通过调试控制台:

  

不能使用<template>作为组件根元素,因为它可能包含   多个节点。

您基本上需要一个根元素,并且由于模板标记可以包含多个元素,因此不允许您在vue中将其用作根元素。

相反,使用div并且您重写的示例有效:

<div id="app-3">
  <div v-if="ok">
    <h1>Title</h1>
    <p>Paragraph 1</p>
    <p>Paragraph 2</p>
  </div>
</div>