You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ant-design-vue/components/skeleton/demo/list.vue

93 lines
2.4 KiB

<docs>
---
order: 5
title:
zh-CN: 列表
en-US: List
---
## zh-CN
在列表组件中使用加载占位符
## en-US
Use skeleton in list component.
</docs>
<template>
<div>
<a-switch :checked="!loading" @change="onChange" />
<a-list item-layout="vertical" size="large" :data-source="listData">
<template #renderItem="{ item }">
<a-list-item key="item.title">
<template v-if="!loading" #actions>
<span v-for="({ icon, text }, index) in actions" :key="index">
<component :is="icon" style="margin-right: 8px"></component>
{{ text }}
</span>
</template>
<template #extra>
<img
v-if="!loading"
width="272"
alt="logo"
src="https://gw.alipayobjects.com/zos/rmsportal/mqaQswcyDLcXyDKnZfES.png"
/>
</template>
<a-skeleton :loading="loading" active avatar>
<a-list-item-meta :description="item.description">
<template #title>
<a :href="item.href">{{ item.title }}</a>
</template>
<template #avatar><a-avatar :src="item.avatar" /></template>
</a-list-item-meta>
{{ item.content }}
</a-skeleton>
</a-list-item>
</template>
</a-list>
</div>
</template>
<script lang="ts" setup>
import { StarOutlined, LikeOutlined, MessageOutlined } from '@ant-design/icons-vue';
import { ref } from 'vue';
interface DataItem {
href: string;
title: string;
avatar: string;
description: string;
content: string;
}
const listData: DataItem[] = [];
for (let i = 0; i < 3; i++) {
listData.push({
href: 'https://www.antdv.com/',
title: `ant design vue part ${i}`,
avatar: 'https://joeschmoe.io/api/v1/random',
description:
'Ant Design, a design language for background applications, is refined by Ant UED Team.',
content:
'We supply a series of design principles, practical patterns and high quality design resources (Sketch and Axure), to help people create their product prototypes beautifully and efficiently.',
});
}
const loading = ref<boolean>(true);
const actions = [
{ icon: StarOutlined, text: '156' },
{ icon: LikeOutlined, text: '156' },
{ icon: MessageOutlined, text: '2' },
];
const onChange = (checked: boolean) => {
loading.value = !checked;
};
</script>
<style scoped>
.skeleton-demo {
border: 1px solid #f4f4f4;
}
</style>