vue模拟加载更多功能(数据追加)

本文介绍在Vue项目中实现“加载更多”功能时遇到的问题及解决方法。主要讨论了使用ajax获取数据并将其追加到现有数据集时,如何正确地使用concat()方法而非push()方法。

使用vue制作加载更多功能,通过ajax获取的数据往data里面push经常不成功,原因是push是往数组中追加数据内容的,而不能用作数组之间的拼接,ajax获取的数据就是数组形式的,因此不成功,应该使用concat()拼接两个数组。

//这是错误的写法
$.ajax({  
                type:'get',
                async:false,
                url:path+'no/noticeMobile/getSendNoticeList?imToken='+ getToken +'&pageFlag=2',
                dataType: "json",
                success: function(msg){
                    _self.$set('loadMore', msg);
                    _self.conList.push(_self.loadMore);
                }
            });
//这是正确的写法
$.ajax({  
                type:'get',
                async:false,
                url:path+'no/noticeMobile/getSendNoticeList?imToken='+ getToken +'&pageFlag=2',
                dataType: "json",
                success: function(msg){
                    _self.$set('main',_self.main.concat(msg))
                }
            });

模拟ajax数据加载测试地址:https://jsfiddle.net/zhoou/96...

总结:还是自己js基础知识不扎实,push和concat两个函数用法没有搞清楚,如果你有更好的方法欢迎讨论。

### Vue3 中实现点击按钮加载更多数据Vue3 应用程序中实现点击按钮来加载更多数据的功能可以通过维护一个状态变量用于跟踪当前已加载数据量以及是否有更多数据加载。每当用户点击“加载更多”按钮时,应用程序会向服务器请求额外的数据并将其附加到现有列表上。 #### 组件结构设计 为了好地管理组件间的交互逻辑,在此场景下可以创建两个主要部分: - **父级组件**:负责展示所有项,并提供一个“加载更多”的按钮。 - **子级组件 (如 `CommentList.vue`)** :处理具体业务逻辑,比如获取特定博客文章下的评论列表[^2]。 #### 关键代码片段 下面是一个简化版的例子,展示了如何利用组合 API 来构建这样的功能: ```javascript <template> <div class="content"> <!-- 展示已有内容 --> <ul v-if="items.length > 0"> <li v-for="(item, index) in items" :key="index">{{ item }}</li> </ul> <!-- 如果有更多数据,则显示加载更多按钮 --> <button @click="loadMore()" v-show="hasMore">加载更多</button> <!-- 正在加载指示器 --> <p v-if="loading">正在加载...</p> </div> </template> <script setup> import { ref } from 'vue'; // 初始化数据 const items = ref([]); // 存储已经加载的内容 let currentPage = 1; // 当前页面编号,默认第一页 const hasMore = ref(true); // 是否存在更多加载数据 const loading = ref(false); // 控制加载中的提示框显隐 function loadItems(pageNumber){ // 模拟异步操作以获取新一批次的数据 return new Promise((resolve)=>{ setTimeout(() => { const newData = Array.from({ length: 5 }, (_, i) => `Item ${pageNumber * 5 + i}` ); resolve(newData); }, 1000); }); } async function loadMore(){ if (!hasMore.value || loading.value) return; try{ loading.value = true; let result = await loadItems(currentPage++); // 将新的项目追加至原有数组之后 items.value.push(...result); // 假设每批返回固定数量记录,这里简单判断是否达到最大页数 if(result.length < 5){ hasMore.value = false; } }finally{ loading.value = false; } } </script> ``` 在这个例子中,通过监听按钮的点击事件触发 `loadMore()` 方法,该方法内部实现了分页机制,即每次增加 `currentPage` 的值并向服务端发起请求获取对应批次的新数据。一旦接收到响应,就将这些新增条目添加到现有的视图当中去。同时,还加入了基本的状态管理和用户体验优化措施,例如防止重复提交、显示加载进度等[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值