当前位置:首页 > VUE

vue实现分页累加

2026-01-19 08:13:29VUE

Vue实现分页累加

基础思路

分页累加通常指滚动加载更多数据时,保留已加载内容并追加新数据。Vue中可通过监听滚动事件或结合第三方库实现。

核心代码实现

数据定义

data() {
  return {
    items: [],       // 已加载数据
    page: 1,         // 当前页码
    isLoading: false, // 加载状态
    hasMore: true    // 是否还有更多数据
  }
}

加载方法

methods: {
  loadMore() {
    if (this.isLoading || !this.hasMore) return

    this.isLoading = true
    fetch(`/api/data?page=${this.page}`)
      .then(res => res.json())
      .then(newItems => {
        this.items = [...this.items, ...newItems]
        this.page++
        this.hasMore = newItems.length > 0
      })
      .finally(() => this.isLoading = false)
  }
}

滚动监听实现

模板部分

<div class="scroll-container" @scroll="handleScroll">
  <div v-for="item in items" :key="item.id">{{ item.content }}</div>
  <div v-if="isLoading">加载中...</div>
</div>

滚动处理方法

handleScroll(e) {
  const { scrollTop, clientHeight, scrollHeight } = e.target
  const bottomReached = scrollTop + clientHeight >= scrollHeight - 100

  if (bottomReached) this.loadMore()
}

使用IntersectionObserver优化

观察器实现

mounted() {
  const observer = new IntersectionObserver((entries) => {
    if (entries[0].isIntersecting) this.loadMore()
  })

  this.$nextTick(() => {
    observer.observe(this.$refs.loadingTrigger)
  })
}

模板对应修改

<div v-for="item in items">{{ item.text }}</div>
<div ref="loadingTrigger" v-if="!isLoading && hasMore"></div>
<div v-if="isLoading">加载中...</div>

注意事项

  • 节流处理:滚动事件建议添加节流函数
  • 错误处理:网络请求需添加catch处理
  • 组件销毁时移除观察者
  • 移动端需考虑touch事件兼容性

完整示例组件

export default {
  data() {
    return {
      items: [],
      page: 1,
      isLoading: false,
      hasMore: true
    }
  },
  methods: {
    async loadMore() {
      if (this.isLoading || !this.hasMore) return

      this.isLoading = true
      try {
        const res = await fetch(`/api/data?page=${this.page}`)
        const newItems = await res.json()
        this.items.push(...newItems)
        this.hasMore = newItems.length > 0
        this.page++
      } finally {
        this.isLoading = false
      }
    }
  },
  mounted() {
    window.addEventListener('scroll', this.handleScroll)
  },
  beforeDestroy() {
    window.removeEventListener('scroll', this.handleScroll)
  }
}

vue实现分页累加

标签: 分页vue
分享给朋友:

相关文章

vue怎么实现动画

vue怎么实现动画

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,包括内置过渡系统、第三方库集成以及 CSS 动画。以下是常见实现方法: 使用 Vue 过渡系统 通过 <transition>…

vue实现横向导航

vue实现横向导航

vue实现横向导航的方法 使用Flex布局实现横向导航 在Vue中可以通过Flex布局快速实现横向导航。创建一个组件,使用display: flex和flex-direction: row属性使导航项…

vue实现按卡片轮播

vue实现按卡片轮播

实现卡片轮播的基本思路 在Vue中实现卡片轮播可以通过结合v-for指令和动态样式绑定完成。核心是维护一个当前显示卡片的索引,通过CSS过渡效果实现平滑切换。 基础实现步骤 模板部分 使用v-for…

vue设计与实现下载

vue设计与实现下载

vue设计与实现电子书下载 《Vue.js设计与实现》是一本深入解析Vue.js框架原理的书籍,由霍春阳(HcySunYang)撰写。以下是获取该资源的常见途径: 正版购买渠道 京东、…

vue中登陆实现逻辑

vue中登陆实现逻辑

Vue 中登录实现逻辑 前端实现逻辑 表单验证 使用 Vue 的表单验证库(如 VeeValidate)或自定义验证规则,确保用户输入的账号和密码符合要求。例如,检查邮箱格式、密码长度等。 发送登录…

vue实现发送值接受值

vue实现发送值接受值

Vue 实现父子组件传值 父组件向子组件传值(props) 父组件通过 v-bind 或简写 : 向子组件传递数据。子组件通过 props 接收数据。 父组件代码: <template&g…