vue中如何根据获取的数据增加图标数量
How to increase the number of icons according the fetched data in vue
我发送了一个 Api 请求并获得了不同数量的参与者(从 1 到 5)。根据这个数字,图标的数量应该出现在模式上。如果有 3 个参与者,则模态中应该有 3 个用户图标。
我知道在 React 里怎么做,但是我开始研究 Vue3 就不知道了。
<template>
<p >
Participants:
<span >
<UserIcon />
</span>
</p>
</template>
<script lang="ts">
import { defineComponent } from '@vue/runtime-core';
import {HeartIcon, UserIcon, XIcon } from '@heroicons/vue/solid'
export default defineComponent({
name: 'NewActivityModal',
components: {HeartIcon, UserIcon, XIcon},
randomActivity: {
type: Object,
required: true,
}
},
})
</script>
在React中我会这样写。但是如何在Vue中重写呢?要清楚,放在哪里?
const participants = [
<span >
{userIcon}
</span>,
];
randomActivity.map((item) => {
for (let i = 1; i < item.participants; i++) {
participants.push(
<span className="inline-block" key={`personIcon${i}`}>
{userIcon}
</span>
);
}
return participants;
});
首先,您创建一个计算 属性,其中 returns 参与者的数量(循环的计数器 x
)。
然后你使用计算的 属性 到 运行 循环 x
次。
这是你想要实现的吗?
<template>
<p >
Participants:
<span
v-for="counter in numberOfParticipants"
:key="counter"
>
<UserIcon />
</span>
</p>
</template>
<script lang="ts">
import { defineComponent } from '@vue/runtime-core';
import {HeartIcon, UserIcon, XIcon } from '@heroicons/vue/solid'
export default defineComponent({
name: 'NewActivityModal',
components: {HeartIcon, UserIcon, XIcon},
props: {
randomActivity: {
type: Object,
required: true,
}
}
},
computed: {
numberOfParticipants () {
return randomActivity
.map(item => {
return item.participants
})
.flat()
.length
}
}
})
</script>
感谢@tho-masn 让我明白了。并重写计算属性
numberOfParticipants () {
let participants = 1
for(let i=1; i < this.randomActivity.participants; i++) {
participants += 1;
}
return participants
}
我发送了一个 Api 请求并获得了不同数量的参与者(从 1 到 5)。根据这个数字,图标的数量应该出现在模式上。如果有 3 个参与者,则模态中应该有 3 个用户图标。 我知道在 React 里怎么做,但是我开始研究 Vue3 就不知道了。
<template>
<p >
Participants:
<span >
<UserIcon />
</span>
</p>
</template>
<script lang="ts">
import { defineComponent } from '@vue/runtime-core';
import {HeartIcon, UserIcon, XIcon } from '@heroicons/vue/solid'
export default defineComponent({
name: 'NewActivityModal',
components: {HeartIcon, UserIcon, XIcon},
randomActivity: {
type: Object,
required: true,
}
},
})
</script>
在React中我会这样写。但是如何在Vue中重写呢?要清楚,放在哪里?
const participants = [
<span >
{userIcon}
</span>,
];
randomActivity.map((item) => {
for (let i = 1; i < item.participants; i++) {
participants.push(
<span className="inline-block" key={`personIcon${i}`}>
{userIcon}
</span>
);
}
return participants;
});
首先,您创建一个计算 属性,其中 returns 参与者的数量(循环的计数器 x
)。
然后你使用计算的 属性 到 运行 循环 x
次。
这是你想要实现的吗?
<template>
<p >
Participants:
<span
v-for="counter in numberOfParticipants"
:key="counter"
>
<UserIcon />
</span>
</p>
</template>
<script lang="ts">
import { defineComponent } from '@vue/runtime-core';
import {HeartIcon, UserIcon, XIcon } from '@heroicons/vue/solid'
export default defineComponent({
name: 'NewActivityModal',
components: {HeartIcon, UserIcon, XIcon},
props: {
randomActivity: {
type: Object,
required: true,
}
}
},
computed: {
numberOfParticipants () {
return randomActivity
.map(item => {
return item.participants
})
.flat()
.length
}
}
})
</script>
感谢@tho-masn 让我明白了。并重写计算属性
numberOfParticipants () {
let participants = 1
for(let i=1; i < this.randomActivity.participants; i++) {
participants += 1;
}
return participants
}