vue移动端分页

本文介绍了一个使用Vue和axios实现的一次请求全部数据后分页显示的例子。通过将所有数据保存在组件的数据属性中,每次点击加载更多时,从已获取的数据中切片展示,避免了多次请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vue 一次请求全部数据分页

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			#box {
				width: 500px;
				background: skyblue;
				margin: 0 auto;
			}
			span{
				font-weight: bold;
				color: red;
			}
		</style>
	</head>
	<body>
		<div id="box">
			<ul>
				<li v-for="(item,index) in list" :key="index">
					<p><span>{{index}}</span>{{item.body}}</p>
				</li>
			</ul>
			<!-- <button type="button" @click="moreShow">加载更多</button> -->
			<div class="">
				<button type="button" v-if="moreShowBoolen" @click="moreShow">点击加载更多</button>
				
				<div  v-else>
					已无更多
				</div>
			</div>

		</div>



	</body>
	
	<script src="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js"></script>
	<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
	<script type="text/javascript">
		new Vue({
			el: '#box',
			data: {
				list: [],
				allList:[],
				moreShowBoolen: false,
				nowPage: 1
			},
			methods: {
				async init() {
					var res = await axios.get('http://jsonplaceholder.typicode.com/posts');
					this.allList=res.data;//保存请求的所有数据
					if (res.data.length <= 20) { 
						this.list = res.data
						this.moreShowBoolen = false
					} else {
						this.list = res.data.slice(0, 20)
						this.moreShowBoolen = true

					}
					
					console.log(this.list)
					console.log(this.allList)
				},
				async moreShow() { 
					// var res = await axios.get('http://jsonplaceholder.typicode.com/posts');
					var  res = this.allList

					this.list = this.list.concat(res.slice(this.nowPage * 20, (this.nowPage + 1) * 20))

					this.nowPage++

					if (res.length >= this.nowPage * 20) {

						this.moreShowBoolen = true

					} else {

						this.moreShowBoolen = false

					}

				}
			},
			created() {
				this.init()
			},
			mounted() {

			},

		})
	</script>
</html>

不记得参照了哪篇文章了…

### 封装适用于移动端Vue 表格组件 为了创建一个适合移动设备使用的表格组件,可以考虑以下几个方面: #### 移动端优化的关键特性 - **响应式布局**:确保表格能够适应不同屏幕尺寸。 - **虚拟滚动**:对于大数据量的情况,采用虚拟列表技术提高性能[^3]。 - **手势操作支持**:提供滑动手势切换页面等功能。 #### 组件设计思路 ##### 基础结构搭建 首先引入必要的依赖库 `Element Plus` 和其他可能需要用到的支持包。接着定义基础模板和样式文件,这里假设已经安装好了所需环境并配置好项目构建工具链。 ```javascript // main.js 或 setup 文件中全局注册 element plus import { createApp } from 'vue'; import App from './App.vue'; import ElementPlus from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; const app = createApp(App); app.use(ElementPlus); app.mount('#app'); ``` ##### 定义核心逻辑 接下来编写具体的表格组件代码如下所示: ```typescript // MobileTable.vue <template> <el-table v-bind="$attrs" ref="tableRef" :data="filteredData" @row-click="handleRowClick" class="mobile-table"> <!-- 自定义表头 --> <el-table-column type="index" width="50"></el-table-column> <el-table-column v-for="(column, index) in columns" :key="index" :prop="column.prop" :label="column.label" :align="column.align || 'left'" show-overflow-tooltip /> <!-- 如果开启了分页,则渲染底部区域 --> <template #append v-if="showPagination && total > pageSize"> <div class="pagination-container"> <el-pagination background layout="prev, pager, next" :total="total" :page-size="pageSize" @current-change="onPageChange"/> </div> </template> </el-table> </template> <script lang="ts"> export default { props: { data: Array, columns: Array, loading: Boolean, tableConfig: Object, showPagination: Boolean, paginationConfig: Object }, computed: { filteredData() { // 可在此处加入筛选条件处理 return this.data; } }, methods: { handleRowClick(row) {}, onPageChange(pageNumber) {} } }; </script> <style scoped> .mobile-table .cell { white-space: nowrap !important; } .pagination-container { margin-top: 1rem; text-align: center; } @media (max-width:768px){ /* 对于更小分辨率下的额外调整 */ ... } </style> ``` 此段代码实现了基本功能的同时也保留了一定程度上的灵活性以便后续扩展更多高级特性和定制化需求[^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值