【问题标题】:What's the use of <template> within a <template> in VueJS 2?VueJS 2 中 <template> 中的 <template> 有什么用?
【发布时间】:2018-07-06 18:21:35
【问题描述】:

我试图了解&lt;template&gt; 的用例及其功能。引用了the docs,我仍然很困惑。

考虑 any.vue 文件中的以下代码:

<template>
   <div class="top-right links">

      <!-- Why use <template> here instead of a div, for example? -->
      <template v-if="authenticated">
         <router-link :to="{ name: 'home' }">
            {{ $t('home') }}
         </router-link>
      </template>

      <template v-else>
         <router-link :to="{ name: 'login' }">
            {{ $t('login') }}
         </router-link>
      </template>

   </div>
</template>

我们为什么要使用&lt;template&gt; 而不是简单的&lt;div&gt;,使用&lt;template&gt; 与使用&lt;custom-component&gt; 有何不同?

【问题讨论】:

  • 您链接到的文档与&lt;template&gt; 标签没有任何关系。
  • @JJJ 呜呜——谢谢!现在更正了:)!

标签: javascript vue.js vuejs2 templating


【解决方案1】:

.vue 的主要&lt;template&gt; 文件中使用&lt;template&gt; 意味着我们要使用不可见的包装器。现在的问题是我们什么时候需要使用隐形包装?答案很简单:每当我们想对 group 元素(而不是 单个 元素)使用 v-ifv-elsev-for 指令时。 p>

因此,在这种情况下,我们使用以下方法包装所有提到的元素组:

&lt;template v-if = " "&gt;&lt;/template&gt;

而这样做,我们只是简单的渲染了上面&lt;template&gt;标签之间的内容,不需要创建一个多余的&lt;div&gt;,然后渲染之后,&lt;template&gt;标签本身就不会存在于DOM中了,所以它作为一个隐形包装做得很好。

【讨论】:

    【解决方案2】:

    如果您使用简单的&lt;div&gt;,即使您的&lt;div&gt; 使用CSS 隐藏,也会加载外部CSS、图像和其他资源。

    点击下面的链接了解为什么在 HTML5 中引入了&lt;template&gt;

    template introduction

    【讨论】:

      【解决方案3】:

      据我了解,使用 &lt;template&gt; 不会渲染出 DOM 中的额外元素。当您有条件地添加多个不需要父 &lt;div&gt; 的元素时,它特别有用。如果&lt;div&gt; 除了条件多个标签之外没有其他用途,则无需额外的&lt;div&gt; 即可完成。

      我通常会默认使用&lt;template&gt;,直到我需要&lt;div&gt; 或其他元素作为父容器,主要用于应用样式。

      【讨论】:

        【解决方案4】:

        你是对的,在你的情况下你应该简单地使用这个:

        <template>
           <div class="top-right links">
             <router-link v-if="authenticated" :to="{ name: 'home' }">
                {{ $t('home') }}
             </router-link>
             <router-link v-else :to="{ name: 'login' }">
                {{ $t('login') }}
             </router-link>
           </div>
        </template>
        

        但是假设您需要条件多个标签不使用父标签

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

        阅读更多:

        【讨论】:

          【解决方案5】:

          模板标签中的内容将呈现到.vue 文件中的视图中。

          【讨论】:

          • 没错,这就是为什么我不明白为什么在可以使用&lt;div v-if="authenticated&gt;" 的情况下在模板中使用&lt;template v-if="authenticated"&gt;...
          • @Michał,上述两种情况都可以,但如果您需要元素是兄弟元素,或者不想要包装多个元素但仍想有条件地渲染它们,您可以使用 template 而不是div 因为它不会出现在 DOM 中
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-05-07
          • 1970-01-01
          • 2018-10-07
          • 1970-01-01
          • 1970-01-01
          • 2018-09-14
          相关资源
          最近更新 更多