components - 一种使用 v-for 指令在 VueJS 上渲染多个根元素的方法

标签 components vuejs2

现在,我正在尝试创建一个网站,该网站显示由我的 NodeJS API 提供的最近的新闻帖子。

我尝试了以下方法:

HTML


<div id="news" class="media" v-for="item in posts">
    <div>
        <h4 class="media-heading">{{item.title}}</h4>
        <p>{{item.msg}}</p>
    </div>
</div>

Javascript


const news = new Vue({
    el: '#news',
    data:   {
        posts:  [
            {title: 'My First News post',   msg: 'This is your fist news!'},
            {title: 'Cakes are great food', msg: 'Yummy Yummy Yummy'},
            {title: 'How to learnVueJS',    msg: 'Start Learning!'},
        ]
    }
})

显然,上面的方法不起作用,因为 Vue 无法渲染多个根元素。

我查了 VueJS 的官方手册,并没有想出一个解决方案。
谷歌搜索一段时间后,我明白不可能渲染多个根元素,但是,我还没有想出一个解决方案。

最佳答案

我发现添加多个根元素的最简单方法是添加一个 <div>包装元素并使用一些 CSS 魔法使其消失以进行渲染。

为此,我们可以使用“display:contents”CSS 属性。效果是它使容器消失,使元素的子元素成为 DOM 中的下一级元素。

因此,在你的 Vue 组件模板中,你可以有这样的东西:

<template>
    <div style="display: contents"> <!-- my wrapper div is rendered invisible -->
        <tr>...</tr>
        <tr>...</tr>
        <tr>...</tr>
    </div>
</template>

我现在可以使用我的组件,而浏览器不会因为包装 <div> 而搞乱格式。出于显示目的,浏览器将忽略根元素:
<table>
   <my-component></my-component> <!-- the wrapping div will be ignored -->
</table>

但是请注意,虽然这应该适用于大多数浏览器,但您可能希望 check here以确保它可以处理您的目标浏览器。

关于components - 一种使用 v-for 指令在 VueJS 上渲染多个根元素的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47511674/

相关文章:

javascript - vuejs动态组件throw error for v-bind :is, error is Property or method ... is not defined on the instance but referenced during render

javascript - 使用 vue 中的 Props 从子模态数据更新父数据

javascript - 我们可以在一个主 App.js 文件中包含一个或多个自关闭组件吗

delphi - 在 Delphi 2009 中显示 PDF 文件的最佳方式是什么

java - 是否有任何开源和免费的日历 UI 可重用组件?

javascript - 最终回调中的 axios 响应对象未定义

javascript - 使用文件输入预览在 v-for 循环中添加/删除行

javascript - 使用 React 组件处理我网站上的所有文本

java - 澄清 Java Swing 中组件类的继承层次结构?

javascript - 如何呈现数据属性?