表格中的 vue.js 条件渲染

Posted

技术标签:

【中文标题】表格中的 vue.js 条件渲染【英文标题】:vue.js conditional rendering in tables 【发布时间】:2016-12-01 19:32:06 【问题描述】:

我有一个由vue 填充的表格,如果有数据,我想在其中显示行,如果没有数据,我想显示“无结果”的行。这是jsfiddle 的基本介绍。

为什么即使满足v-if 条件,v-else 行仍会继续显示?

【问题讨论】:

【参考方案1】:

很遗憾,v-ifv-for 没有一起工作。您可以将v-if 移动更高一级,如下所示:

<tbody v-if="my_tasks.length">
    <tr id="retriever-task- index " v-for="(index, task) in my_tasks" >
        <td> task.id </td>
        <td> task.type </td>
        <td> task.frequency </td>
        <td> task.status </td>
        <td><i v-on:click="deleteTask(index, task.id)" class="fa fa-trash"></i></td>
    </tr>
</tbody>
<tbody v-else>
    <tr>
        <td colspan="6">No tasks found.</td>
    </tr>
</tbody>

你也可以使用伪元素template:

<template v-if="my_tasks.length">
    <tr id="retriever-task- index " v-for="(index, task) in my_tasks" >
        <td> task.id </td>
        <td> task.type </td>
        <td> task.frequency </td>
        <td> task.status </td>
        <td><i v-on:click="deleteTask(index, task.id)" class="fa fa-trash"></i></td>
    </tr>
</template>
<template v-else>
    <tr>
        <td colspan="6">No tasks found.</td>
    </tr>
</template>

【讨论】:

我忘了这个!!顺便说一句,你拯救了我的夜晚@Randall,也感谢 +1 的问题 如果每一列在包含的元素和操作按钮等方面都不同,这很快就会变成 v-else-if 地狱,还有更好的方法吗? 在这种情况下,您可能应该将该行移至子组件。【参考方案2】:

来自 Vuejs 文档“v-else 元素必须紧跟在 v-if 或 v-show 元素之后 - 否则将无法识别。” -https://vuejs.org/guide/conditional.html。看起来 v-if 后面的附加 vue 数据绑定属性正在破坏它(例如 v-for 和 v-on)。

您可以改用 v-show。例如:

    <tr v-show="!my_tasks.length">
      <td colspan="6">No tasks found.</td>
    </tr>

【讨论】:

不,这与它无关。 “必须立即跟随”的表述是指同一级别的 HTML 元素。 Wahtever 嵌套在里面,在那个上下文中无关紧要。只有同一级别的v-if 才是问题所在,正如上面的 yariash 解释的那样。其他指令(v-on 等)也可以。 谢谢。但是,在 OP 的示例中使用 v-show 效果很好。【参考方案3】:

yariash 关于v-ifv-for 是正确的。您可以按照他的建议进行操作,或者将v-else 更改为v-if 的反面,即v-if="!my_tasks.length"

【讨论】:

以上是关于表格中的 vue.js 条件渲染的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 实践:实现多条件筛选搜索排序及分页的表格功能

vue.js键盘操作表格选中那一行

从 json 数据渲染表格后,如何根据 Datatables.js 中的条件为每个单元格着色? [复制]

Vue.js 系列 - Vue 中的条件渲染

Vue小模块之功能全面的表格筛选表格中的数据

Vue js,引导程序。表格中的过渡效果不起作用