如何使用v-if语句只显示JSON数组中“checked”值设置为true的th/tr?如果checked === true
,我希望显示它。如果checked === false
,我希望隐藏它。
App.vue:
<Overview
:activeColumns="items"
></Overview>
<script lang="ts" setup>
const items = [
{ id: 0, text: 'date', checked: true },
{ id: 1, text: 'name', checked: false },
{ id: 2, text: 'day', checked: false },
{ id: 3, text: 'time', checked: false },
{ id: 4, text: 'created', checked: false },
{ id: 5, text: 'reason', checked: true },
{ id: 6, text: 'comment', checked: true },
];
</script>
Overview.vue:
<script lang="ts" setup>
const props = defineProps<{
activeColumns: {};
}>();
const reactiveProps = reactive({
activeColumns: props.activeColumns,
});
<table>
<thead>
<tr>
<th class="date"><!-- Only show if (text === 'date' && checked === true) -->
<CustomComponent /> <!-- Does not use any of the JSONArray data -->
</th>
<th class="name"> <!-- Only show if (text === 'name' && checked === true) -->
<OtherCustomComponent /> <!-- Does not use any of the JSONArray data -->
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="date"><!-- Does not use any of the JSONArray data --></td><!-- Only show if (text === 'date' && checked === true) -->
<td class="name"><!-- Does not use any of the JSONArray data --></td><!-- Only show if (text === 'name' && checked === true) -->
</tr>
</tbody>
</table>
</script>
2条答案
按热度按时间0md85ypi1#
看起来您的目标是根据表示列的数据属性的选中状态来显示表列。如果是这样,那么再次,我将使所有数据具有React性,然后使用Vue的计算属性来帮助我们决定要显示什么。
因此,假设这表示列数据的简化:
然后我们可以给第二个组件Overview. vue一个名为"columns"的 prop :
然后是一个名为
activeColumns
的计算属性,它只保存"选中"列对象:然后让我们假设要在表中显示的数据看起来像这样(同样是简化):
然后我们可以使用computed属性
activeColumns
in a v-for来决定要显示哪些数据:你还提到,
在每个div中,我有不同的组件,所以我不能用v-for循环。
但这并不一定是真的,因为你可以把你的组件放入一个数组或对象中,并使用动态组件来允许你循环访问它们:
显示为动态组件:
例如:
应用程序版本
和概述
对于用作表头的组件数组:
日期
名称值
日值
原因值
备注值
3bygqnnd2#
您应该更改JSON对象。
如果你不能改变JSON结构,那么使用find方法访问单个对象。
或者你可以用computed把你的数组转换成你想要的对象。