ElementPlus---Timeline 时间线组件使用示例

介绍

使用ElementPlus时间线组件在后台首页实现通知公告列表展示,使用Vue3开发。

实现代码

Vue3代码

<el-timeline>
    <el-timeline-item
      style="max-width: 600px"
      v-for="(activity, index) in activities"
      :key="index"
      :timestamp="activity.releaseTime"
      placement="top"
    >
      <el-card>
        <h4>{{ activity.name }}</h4>
        <p>{{ activity.content }}</p>
      </el-card>
    </el-timeline-item>
    <el-timeline-item>
      <RouterLink to="/homeNotice">更多</RouterLink>
    </el-timeline-item>
  </el-timeline>

JS代码

///列表
const activities = ref<SysNotice[]>([])
onMounted(() => {
  getNoticeList()
})

const getNoticeList = async () => {
  const { code, data } = await crudApi.listUrl<SysNotice>(
    SysIndexUrl.GetNotice.replace('{num}', '3')
  )
  if (code === 200) {
    activities.value = data
  }
}

完整代码

<template>
  <el-timeline>
    <el-timeline-item
      style="max-width: 600px"
      v-for="(activity, index) in activities"
      :key="index"
      :timestamp="activity.releaseTime"
      placement="top"
    >
      <el-card>
        <h4>{{ activity.name }}</h4>
        <p>{{ activity.content }}</p>
      </el-card>
    </el-timeline-item>
    <el-timeline-item>
      <RouterLink to="/homeNotice">更多</RouterLink>
    </el-timeline-item>
  </el-timeline>
</template>

<script setup lang="ts">
import { onMounted, ref } from 'vue'
import { RouterLink } from 'vue-router'
import type { SysNotice } from '@/api/types'
import crudApi from '@/api/system/crudApi'
import { SysIndexUrl } from '@/api/urls'

///列表
const activities = ref<SysNotice[]>([])
onMounted(() => {
  getNoticeList()
})

const getNoticeList = async () => {
  const { code, data } = await crudApi.listUrl<SysNotice>(
    SysIndexUrl.GetNotice.replace('{num}', '3')
  )
  if (code === 200) {
    activities.value = data
  }
}
</script>

<style scoped>
.name {
  cursor: pointer;
}
</style>

实现InfiniteScroll和Timeline时间线结合,可以通过以下步骤来实现: 1. 使用element-plus的InfiniteScroll组件实现无限滚动加载更多数据。 2. 在滚动到底部时,通过接口获取更多的时间线数据。 3. 将获取到的时间线数据与之前的数据合并,并按照时间排序。 4. 使用element-plus的Timeline组件展示时间线数据。 下面是一个简单的代码示例: ```html <template> <el-timeline> <el-timeline-item v-for="(item, index) in timelineData" :key="index"> {{ item.content }} </el-timeline-item> <div v-infinite-scroll="loadMore" infinite-scroll-disabled="loading" infinite-scroll-distance="10"> <div v-if="loading">Loading...</div> </div> </el-timeline> </template> <script> import { ref } from 'vue' import { Timeline, TimelineItem, InfiniteScroll } from 'element-plus' export default { components: { [Timeline.name]: Timeline, [TimelineItem.name]: TimelineItem }, directives: { InfiniteScroll }, setup() { const timelineData = ref([]) const loading = ref(false) const loadMore = () => { if (loading.value) return loading.value = true // 调用接口获取更多数据 fetchData().then(data => { timelineData.value = [...timelineData.value, ...data] timelineData.value.sort((a, b) => b.timestamp - a.timestamp) loading.value = false }) } const fetchData = () => { // 模拟异步接口调用 return new Promise(resolve => { setTimeout(() => { const data = [ { content: 'New message', timestamp: Date.now() }, { content: 'Another message', timestamp: Date.now() + 1000 }, { content: 'More messages', timestamp: Date.now() + 2000 } ] resolve(data) }, 1000) }) } // 初始化加载数据 loadMore() return { timelineData, loading, loadMore } } } </script> ``` 在上面的示例中,我们使用了`v-infinite-scroll`指令来监听滚动事件,并在滚动到底部时触发`loadMore`方法。`loading`变量用于控制是否正在加载数据,避免重复请求数据。`fetchData`方法模拟异步接口调用,返回一个包含时间线数据的Promise对象。在`loadMore`方法中,我们调用接口获取更多数据,将其与之前的数据合并,并按照时间进行排序。最后,我们在模板中使用element-plus的Timeline组件展示时间线数据。 需要注意的是,由于element-plus的Timeline组件需要对数据进行排序,因此我们需要确保数据中包含一个可以用于比较的时间戳字段,例如上面示例中的`timestamp`字段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值