【发布时间】:2021-07-05 05:19:44
【问题描述】:
我有一个列表组件和一个循环项目组件,如下所示:
RoomList.vue
<template>
<ul id="TheRoomList">
<button
id="TheCreateRoomButton"
@click="createRoom()"
:disabled="createRoomIsDisabled"
>
<span v-if="createRoomIsDisabled">Loading...</span>
<span v-else>Create Room</span>
</button>
<div v-if="rooms.length === 0">Loading...</div>
<div v-else>
<room-item v-for="room in rooms" :key="room.id" :room="room" />
</div>
</ul>
</template>
<script>
import RoomItem from "./RoomItem.vue";
export default {
components: { RoomItem },
data: () => ({
createRoomIsDisabled: false,
rooms: [],
}),
methods: {
async createRoom() {
this.createRoomIsDisabled = true;
const newRoom = await this.$db.collection("rooms").add({
creator: this.$auth.currentUser.email,
created_at: new Date(),
});
this.$router.push(newRoom.id);
},
},
created() {
this.$bind(
"rooms",
this.$db.collection("rooms").orderBy("created_at", "desc")
);
},
};
</script>
RoomItem.vue
<template>
<li id="Room" :data-id="room.id">
<a :href="room.id" target="_blank" style="font-family: monospace">{{
room.id.toUpperCase()
}}</a>
<button v-if="room.creator === $user.email" @click="deleteRoom()">
Delete
</button>
</li>
</template>
<script>
export default {
props: {
room: Object,
},
methods: {
deleteRoom() {
this.$db.collection("rooms").doc(this.room.id).delete();
},
},
};
</script>
可以将方法放在循环组件中吗?它会影响性能和/或应用大小吗?
我可以将事件发送到父组件中,但它会使父组件因方法而膨胀(将来)。所以,如果是这样,那我别无选择。
【问题讨论】:
-
由于您已经拥有一个数据源,我认为这并不重要,即使我更喜欢这种方式。在我看来,这是一种很好的方法,它不应该影响应用程序的大小或性能,据我所知。
标签: javascript vue.js