V-for 与 v-if 或计算 属性
V-for with v-if or computed property
我一直无法理解计算属性,但我认为这就是我的 issue.Basically 所需要的,我有一个 table,其中的列是我从 API 填充的回复。其中一列是每月,我需要检查当前的月份和年份,然后写下该月的剩余使用情况。如果我没有月份或年份的数据,或者数组为空,我应该打破这个循环,并显示 main_usage.
我正在考虑使用计算 属性,但我不确定如何..
下面有示例代码和json
<!-- First v-for for looping through all permissions data -->
<tr v-for="t in permissions" :key="t.id">
<!-- If we have data in .permission_usage show it -->
<template v-if="t.permission_usage.length">
<!-- Loop through permission_usage -->
<template v-for="p in t.permission_usage" :key="p.id">
<!--Check dates, works fine -->
<template v-if="currentYear()===p.year && currentMonth()===p.month">
<!-- Shows data as it should -->
<td>{{p.used}}</td>
</template>
<!-- Here comes my issue -->
<template v-else>
<!-- I don't want to loop through data anymore, because I would have main_usage for every permission_usage because i'm in loop, here I would like to break loop-->
<td>{{t.main_usage}}</td>
</template>
</template>
</template>
<!-- If we don't have data in .permission_usage show main_usage -->
<template v-else>
<td>{{t.main_usage}}</td> </template>
</tr>
//响应存储在权限数组中
//currentMonth()和currentYear() return当前月份和当前年份的值
JSON
[
{
"main_usage": 5000,
"permission_usage": [
{
"year": 2021,
"month": 6,
"used": 66,
},
{
"year": 2021,
"month": 7,
"used": 220,
},
....
]
},
...
]
这是 fiddle https://jsfiddle.net/2bk4ga5y/57/ ,但我的输出应该是:
220
77
33
1500.
提前致谢!
未测试但类似这样的东西?
如果你使用的是 Vue 2:
computed: {
permissions: () => this.$store.getters.whateverAPIsetupYouhavethere
}
在 Vue 3 中:
import { ref } from 'vue'
setup(){
const permissions = ref(this.$store.getters.whateverAPIsetupYouhavethere)
return { permsissions }
}
所以我开始明白我无法直接在 UI 中更改内容,并且我需要在数据呈现在页面上之前对其进行处理,当我意识到这一点时,它真的简单。因此,在该方法中,我创建了一个名为 showRenderedData 的新 属性,其值为字符串“None”并将其绑定到我的模板,因此它将始终显示“None”。
然后,我首先通过权限进行 forEach 循环,然后我将新的 属性 showRenderData 覆盖为 main_usage。在该循环之后,我制作了另一个 forEach 用于遍历 permission_usage,在那里设置条件以检查月份和长度,并且只有在满足条件的情况下,我才会覆盖满足条件的地方 属性 和 row_export_usage。
稍后我将使用此方法编辑 fiddle,以便有人可以看到它的实际效果。
我一直无法理解计算属性,但我认为这就是我的 issue.Basically 所需要的,我有一个 table,其中的列是我从 API 填充的回复。其中一列是每月,我需要检查当前的月份和年份,然后写下该月的剩余使用情况。如果我没有月份或年份的数据,或者数组为空,我应该打破这个循环,并显示 main_usage.
我正在考虑使用计算 属性,但我不确定如何..
下面有示例代码和json
<!-- First v-for for looping through all permissions data -->
<tr v-for="t in permissions" :key="t.id">
<!-- If we have data in .permission_usage show it -->
<template v-if="t.permission_usage.length">
<!-- Loop through permission_usage -->
<template v-for="p in t.permission_usage" :key="p.id">
<!--Check dates, works fine -->
<template v-if="currentYear()===p.year && currentMonth()===p.month">
<!-- Shows data as it should -->
<td>{{p.used}}</td>
</template>
<!-- Here comes my issue -->
<template v-else>
<!-- I don't want to loop through data anymore, because I would have main_usage for every permission_usage because i'm in loop, here I would like to break loop-->
<td>{{t.main_usage}}</td>
</template>
</template>
</template>
<!-- If we don't have data in .permission_usage show main_usage -->
<template v-else>
<td>{{t.main_usage}}</td> </template>
</tr>
//响应存储在权限数组中
//currentMonth()和currentYear() return当前月份和当前年份的值
JSON
[
{
"main_usage": 5000,
"permission_usage": [
{
"year": 2021,
"month": 6,
"used": 66,
},
{
"year": 2021,
"month": 7,
"used": 220,
},
....
]
},
...
]
这是 fiddle https://jsfiddle.net/2bk4ga5y/57/ ,但我的输出应该是:
220
77
33
1500.
提前致谢!
未测试但类似这样的东西? 如果你使用的是 Vue 2:
computed: {
permissions: () => this.$store.getters.whateverAPIsetupYouhavethere
}
在 Vue 3 中:
import { ref } from 'vue'
setup(){
const permissions = ref(this.$store.getters.whateverAPIsetupYouhavethere)
return { permsissions }
}
所以我开始明白我无法直接在 UI 中更改内容,并且我需要在数据呈现在页面上之前对其进行处理,当我意识到这一点时,它真的简单。因此,在该方法中,我创建了一个名为 showRenderedData 的新 属性,其值为字符串“None”并将其绑定到我的模板,因此它将始终显示“None”。 然后,我首先通过权限进行 forEach 循环,然后我将新的 属性 showRenderData 覆盖为 main_usage。在该循环之后,我制作了另一个 forEach 用于遍历 permission_usage,在那里设置条件以检查月份和长度,并且只有在满足条件的情况下,我才会覆盖满足条件的地方 属性 和 row_export_usage。 稍后我将使用此方法编辑 fiddle,以便有人可以看到它的实际效果。