前後端分離項目(六):數據分頁查詢(前端視圖)
- 2022 年 10 月 23 日
- 筆記
好傢夥,該項目為vue2項目
本篇更新數據分頁查詢的前端部分
先來看看最終效果
最終程式碼:
<!-- 該組件為表單主要組件 -->
<template>
<div>
<!-- 標題 -->
<h4 class="text-center">用戶管理</h4>
<!-- 用戶添加按鈕 -->
<el-col :span="4">
<el-button type="primary" @click="addDialogVisible = true">添加用戶</el-button>
</el-col>
<!-- 用戶列表 -->
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="id" label="序號" width="180">
</el-table-column>
<el-table-column prop="name" label="書名" width="180">
</el-table-column>
<el-table-column prop="author" label="作者 " width="180">
</el-table-column>
</el-table>
<el-pagination
:page-size="6"
:pager-count="11"
layout="prev, pager, next"
:total="total"
@current-change="page">
</el-pagination>
</div>
</template>
<script>
import axios from 'axios'
export default {
name: 'MyUser',
data() {
return {
total: null,
// 用戶列表數據
tableData: [
{ id: '1', name: '三體1', author: '大劉' },
{ id: '2', name: '三體2', author: '大劉' },
],
addDialogVisible: false, //控制添加用戶對話框的顯示與隱藏
addUserForm: {},
//添加表單的驗證規則對象
addUserFormRules: {
// username: [{required:true,message:'請輸入用戶名',trigger:'blur'},
// {min:3,max:10,message:'用戶名長度在3~10個字元',trigger:'blur'}],
// password: [{required:true,message:'請輸入密碼',trigger:'blur'},
// {min:6,max:15,message:'密碼長度在6~15個字元',trigger:'blur'}],
// email: [{required:true,message:'請輸入郵箱',trigger:'blur'}],
// mobile: [{required:true,message:'請輸入手機號',trigger:'blur'}]
}
}
},
methods: {
page(currentPage){
const _this = this;
axios.get('//localhost:8011/book/findAll/'+currentPage+'/6').then(function (resp) {
_this.tableData = resp.data.content
_this.total = resp.data.totalElements
console.log(resp.data)
})
}
},
created() {
const _this = this;
axios.get('//localhost:8011/book/findAll/1/6').then(function (resp) {
_this.tableData = resp.data.content
_this.total = resp.data.totalElements
console.log(resp.data)
})
}
}
</script>
<style lang="less" scoped>
</style>
1.先來屢一下思路,
我們要在前端分頁展示我們的數據, 一頁六份數據,
那麼我們要做到,每頁對應一個不同的頁數的網路請求,
拿到數據後,將它展示在table中
把我們要用的東西安裝並配置一下
我們安裝我們的老朋友Element UI
npm i element-ui -S
再安裝我們的axios
npm install axios -S
main.js中,
import Vue from 'vue'
import App from './App.vue'
import axios from 'axios';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
//導入路由模組
import router from "@/router"
// 導入樣式
import './assets/css/bootstrap.css'
import './index.css'
Vue.config.productionTip = false
new Vue({
router,
axios,
render: h => h(App),
}).$mount('#app')
2.然後我們來逛一下element商城(去elementUI偷點組件)
拿個table
再拿個分頁,
隨後我們就可以搭建出我們的基礎頁面了
看一下後端給我們的數據長什麼樣子
page(currentPage){
axios.get('//localhost:8011/book/findAll/1/6').then(function (resp) {
console.log(resp.data)
})
}
看看數據
3.開寫
來編輯”分頁”
<el-pagination
:page-size="6" //一頁展示的最大數據量
:pager-count="11"
layout="prev, pager, next"
:total="total"
@current-change="page">
</el-pagination>
對應的page方法
page(currentPage){
const _this = this;
axios.get('//localhost:8011/book/findAll/'+currentPage+'/6').then(function (resp) {
_this.tableData = resp.data.content
_this.total = resp.data.totalElements
console.log(resp.data)
})
}
},
注意:1.page方法中的currentPage是”當前頁數”,(跟翻譯一個意思,人性化)
2.想想看這裡this為什麼要這樣寫
此處,我們調用網路請求拿到數據後,替換我們本來展示的數據就可以了
當然,我們還要還要將總數據量賦值給total
第一頁的數據因為我們一開始就要看到,
所以我們把第一頁的網路請求放在生命周期函數created中,
created() {
const _this = this;
axios.get('//localhost:8011/book/findAll/1/6').then(function (resp) {
_this.tableData = resp.data.content
_this.total = resp.data.totalElements
console.log(resp.data)
})
}
4.最後去把後端啟動
(後端介面的詳細寫法在上一篇測試項目(五):數據分頁查詢(後端介面) – 養肥胖虎 – 部落格園 (cnblogs.com)),
潤!!!(激動)
資料庫的表:
嗯.搞定了
最終效果放在開頭了