2022. 3. 20. 08:00ใProgramming Project ์์ ์ค/๋ด์ฉ ์ ๋ฆฌ
๐ง๐ป๐ป Git Hub ์ฃผ์
๐ ๋ชฉ์ฐจ
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - Home / Main
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ๋ชฉ๋ก ์กฐํ
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ์์ธ ์กฐํ
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ๋ฑ๋ก / ์์
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ์ญ์
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ๋ต๋ณ ๋ฑ๋ก / ์์
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ๋ต๋ณ ์ญ์
๐จ๐ฉ๐ง๐ฆ ํ์ ๊ด๋ จ
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ํ์ ๊ด๋ จ : ํ์ ๊ฐ์
- ๋ถ ๋ก -
[FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - Paging ์ฒ๋ฆฌ
[Vue.js] ๊ธฐ์ด ๊ฐ๋ ์ ๋ฆฌ - Vue Router
๐ ๊ฒ์ํ ๋ง๋ค๊ธฐ - Paging ์ฒ๋ฆฌ
<!-- Paging ์ฒ๋ฆฌ ๊ด๋ จ Component -->
<template>
<div class="tPages">
<ul>
<li class="prev02">
<a href="javascript:;" @click="firstPage">
<img :src="require(`@/assets/images/btn_first.png`)">
</a>
</li>
<li class="prev">
<a href="javascript:;" @click="prevPage">
<img :src="require(`@/assets/images/btn_prev.png`)">
</a>
</li>
<li v-for="i in range(startPage, endPage)" v-bind:key="i" :class="classActive(i)">
<a href="javascript:;" @click="setPage(i)">
<template v-if="i !== nowPage" style="cursor: pointer;">{{ i }}</template>
<template v-else-if="i === nowPage">{{ i }}</template>
</a>
</li>
<li class="next">
<a href="javascript:;" @click="nextPage">
<img :src="require(`@/assets/images/btn_next.png`)">
</a>
</li>
<li class="next02">
<a href="javascript:;" @click="lastPage">
<img :src="require(`@/assets/images/btn_last.png`)">
</a>
</li>
</ul>
</div> <!-- div class="tPages" ๋ -->
</template>
<script>
import _ from "lodash";
export default {
name: "Pagination",
props: {
totalCount: {
type: Number,
default: 0
}, // totalCount ๋
rowCount: {
type: Number,
default: 10
}, // rowCount ๋
pageLimit: {
type: Number,
default: 10
}, // pageLimit ๋
currPage: {
type: Number,
default: 1
}, // currPage ๋
}, // props ๋
data() {
return {
startPage: 1,
nowPage: 1,
nowPageBlock: 1,
pervRowCount: 0
};
}, // data() ๋
watch: {
currPage: "currPageSet"
}, // watch ๋
computed: {
totalPage() { // ํ Page ๋น ๊ฑด ์ ๋ณ๊ฒฝ ์ 1 Page๋ก ์ค์
if (this.rowCount !== this.prevRowCount) {
this.prevRowCount = this.rowCount;
// 1Page๋ก ๋ณ๊ฒฝ
this.setFirstPage();
} // if (this.rowCount != this.prevRowCount) ๋
console.log("ํ์ด์ง ์ฒ๋ฆฌ ๋ถ์์ ์ด ํ์ด์ง ์ : " + this.totalPage + " ๋ฅผ ์๋ ค ๋๋ฆฝ๋๋ค!");
return _.ceil(this.totalCount / this.rowCount);
}, // totalPage() ๋
endPage() { // ํ Page ๋น ๊ฑด ์ ๋ณ๊ฒฝ ์ 1 Page๋ก ์ค์
if (this.rowCount !== this.prevRowCount) {
this.prevRowCount = this.rowCount;
// 1 Page๋ก ์ค์
this.setFirstPage();
} // if (this.rowCount !== this.prevRowCount) ๋
const check = this.startPage + this.pageLimit - 1;
return check <= this.totalPage ? check : this.totalPage;
} // endPage() ๋
}, // computed ๋
methods: {
range(start, end) {
return _.range(start, end + 1);
}, // range(start, end) ๋
setPage(page) {
this.nowPage = page;
this.changePage();
}, // setPage(page) ๋
firstPage() {
// 1 Page๋ก ์ค์
this.setFirstPage();
this.changePage();
}, // firstPage() ๋
prevPage() {
if (this.nowPage > 1) {
this.nowPage --;
} // if (this.nowPage > 1) ๋
if (this.nowPage < this.startPage) {
this.nowPageBlock --;
this.startPage = (this.nowPageBlock - 1) * this.pageLimit + 1;
} // if (this.nowPage < this.startPage) ๋
this.changePage();
}, // prevPage() ๋
nextPage() {
console.log("ํ์ด์ง ์ฒ๋ฆฌ ๋ถ์์ ํ์ฌ Page : " + this.nowPage + " ๋ฅผ ์๋ ค ๋๋ฆฝ๋๋ค!");
console.log("ํ์ด์ง ์ฒ๋ฆฌ ๋ถ์์ ์ด ํ์ด์ง ์ : " + this.totalPage + " ๋ฅผ ์๋ ค ๋๋ฆฝ๋๋ค!");
console.log("ํ์ด์ง ์ฒ๋ฆฌ ๋ถ์์ ๋ง์ง๋ง ํ์ด์ง : " + this.endPage + " ๋ฅผ ์๋ ค ๋๋ฆฝ๋๋ค!");
if (this.nowPage < this.totalPage) {
this.nowPage ++;
} // if (this.nowPage < this.totalPage) ๋
if (this.nowPage > this.endPage) {
this.nowPageBlock ++;
this.startPage = this.nowPage;
} // if (this.nowPage > this.endPage) ๋
this.changePage();
}, // nextPage() ๋
lastPage() {
this.nowPage = this.totalPage;
this.nowPageBlock = _.ceil(this.totalPage / this.pageLimit);
this.startPage = (this.nowPageBlock - 1) * this.pageLimit + 1;
this.changePage();
}, // lastPage() ๋
changePage() {
this.$emit("change-page", this.nowPage);
}, // changePage() ๋
classActive(i) {
if (i === this.nowPage) {
return "active";
} // if (i === this.nowPage) ๋
}, // classActive(i) ๋
setFirstPage() { // 1 Page๋ก ์ค์
this.nowPage = 1;
this.nowPageBlock = 1;
this.startPage = 1;
}, // setFirstPage() ๋
currPageSet() {
this.nowPage = this.currPage;
if (this.nowPage === 1) {
this.startPage = 1;
} // if (this.nowPage === 1) ๋
} // currPageSet() ๋
} // methods ๋
}; // export default ๋
</script>
์์ Code๊ฐ ๋ฐ๋ก Paging์ฒ๋ฆฌ๋ฅผ ์ํ Component์ธ Pagination.vue์ธ ๊ฒ์ด์์.
div์ ๊ฐ์ ํ๊ทธ๋ค์ ์๋ต์ ํ๊ณ , ์ค์ ์ ์ผ๋ก ์ค์ํ ๋ด์ฉ๋ค์ ๋ํด์ ๋ถ์์ ํด๋ณด๋ ค๊ณ ํ๋ ๊ฒ์ด์์. ๋จผ์ ul Tag๋ฅผ ํตํด์ ์์ ์๋ ๋ชฉ๋ก์ ๋ง๋ค์ด ์ค ๊ฒ์ด์์. ๊ทธ๋ฐ ๋ค 6~10 ๋ฒ์งธ ์ค๊น์ง <li>๋ก ๊ฐ ํญ๋ชฉ์ ๋ํ๋ด๋๋ก ํ ๊ฒ์ด์์.
๋จผ์ <a> Tag๋ฅผ ํตํด href ์์ฑ์ javascipt:; ์ ์ฃผ์๋๋ฐ, ์ด๊ฑด `href="#"`๊ณผ ๋์ผํ ๋ด์ฉ์ธ ๊ฒ์ด์์. ์ฆ, ํด๋ฆญํด๋ ์๋ฌด๊ฒ๋ ํ์ง ์๊ฒ ๋ค๋ ์๋ฏธ๋ก ์ฌ์ฉํ ๊ฒ์ด์์. ์ด๋๊ฐ๋ก ์ด๋ํ๊ธฐ ์ํด ์ฐ๋ ๊ฒ์ด ์๋๋ผ ์ด๋ค ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ์ํด ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ํด ์ค ๊ฒ์ด์์.
๊ทธ ๋ค์ Click Event๊ฐ ๋ฐ์ํ๋ฉด firstPage()๋ฅผ ํธ์ถํ๋๋ก ํด ์ค ๊ฒ์ด์์.
์ด๋ฆ์ด ์์ฃผ ์ง๊ด์ ์ธ ๊ฒ์ด์์.
์ด <a> Tag๋ฅผ ํด๋ฆญํ๊ฒ ๋๋ฉด ์๋์ ๊ฐ์ด ์๊ธด Button์ ํด๋ฆญํ ๊ฒ์ธ๋ฐ (Button์ ์๋์ง๋ง, Button์ด๋ผ ์นญํจ) ์ด๊ฑด ๋งจ ์ Page๋ก ์ด๋ํ๋ Button์ธ ๊ฒ์ด์์.
๋จผ์ ํด๋น Method๊ฐ ๋์ํ๋ฉด setFirstPage()๋ฅผ ํธ์ถ ํ๊ฒ ๋๋ ๊ฒ์ด์์.
์ต์ด ํด๋น Method๊ฐ ๋์ํ๊ฒ ๋๋ฉด nowPage๋ผ๋ Member ๋ณ์์ ๊ฐ์ด 1๋ก ๋ณํ๊ณ , nowPageBlock๋ 1๋ก startPage ๋ ๋ชจ๋ 1๋ก ์ด๊ธฐํ๊ฐ ๋์ด ๊ฒฐ๊ตญ 1 Page๋ก ์ค์ ๋๋๋ก ํด ์ฃผ๋ ๊ฒ์ด์์.
๊ทธ๋ฐ ๋ค์ firstPage()๋ก ๋ค์ ๋์์์ ์ด๋ฒ์๋ changePage()๋ฅผ ํธ์ถํ๋ ๊ฒ์ด์์.
์ด Method๋ this.$emit()์ ํธ์ถํ๋๋ฐ, ์ด๊ฒ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ์๊ฒ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ์ด์ฉํ๋ ๊ฒ์ด์์. ์๋ฅผ ๋ค์ด ์์ ์ปดํฌ๋ํธ์์ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ ์ด๋ฒคํธ๋ฅผ ๋ง๋ค์ด ๋ถ๋ชจ ์ปดํฌ๋ํธ์๊ฒ ์ด๋ค Data๋ฅผ ์ ๋ฌํ ์ ์๋ ๊ฒ์ด์์. ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ ์์ ์ปดํฌ๋ํธ์์ ๋ง๋ค์ด์ง ๊ฐ๋ฐ์ ์ง์ Event๋ฅผ ๋ฐ์ `v-on` ์ฆ, ํน์ ๋์์ ์ํํ ์ ์๋ ๊ฒ์ด์์.
๊ทธ๋ผ ์ฌ๊ธฐ์ ๋งํ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ ๋๊ฐ ๋ ๊น์?
๋ฐ๋ก ๊ฐ ๊ฒ์ํ ํน์ ํ์ ๊ด๋ฆฌ ๋ฑ ๋ชฉ๋ก ์กฐํ๋ฅผ ํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ ๊ฒ์ด์์. ์ง๊ธ์ Q&A ๊ฒ์ํ์ ๋ชฉ๋ก ์กฐํ๋ง ์๋ฃ๊ฐ ๋์๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ์ ํ์ธ ํด ๋ณด๋ฉด
์ด ๊ณณ์ ์์ ๊ฐ์ด Component๊ฐ ์ ์ธ๋ ๊ฑธ ๋ณผ ์ ์๋ ๊ฒ์ด์์. changePage()์ this.$emit์ change-page๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ 100๋ฒ์งธ ์ค @change-page์๊ฒ ๊ฐ์ ์ ๋ฌํด ์ฃผ๋ ๊ฒ์ธ๋ฐ, ๊ทธ ๊ฐ์ ๋ฐ๋ก `this.nowPage` ์ฆ ํ์ฌ ์ด์ฉ์๊ฐ ์์นํ Page์ ์ ์ ๊ฐ์ ์ ๋ฌ ํด ์ฃผ๊ฒ ๋ค๋ ๊ฒ์ด์์. ๊ทธ๋ผ ์ด๊ฑธ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ฐ๊ฒ ๋๋ฉด changePage()๋ผ๋ Method๊ฐ ์คํ ๋๋ ๊ฒ์ด์์.
์ด ์น๊ตฌ๋ ํ Page ์์ผ๋ก ์ด๋ํ๋ Button์ธ ๊ฒ์ด์์.
click Event๊ฐ ๋ฐ์ํ๋ฉด prevPage()๊ฐ ํธ์ถ ๋๋ ๊ฒ์ด์์.
์ด Method๊ฐ ํธ์ถ๋๋ฉด ์ผ๋จ ๋ฌผ์ด๋ณด๋ ๊ฒ์ด์์. "nowPage๊ฐ 1๋ณด๋ค ํฝ๋๊น?" ์ฆ, ํ์ฌ ์ด์ฉ์๊ฐ ์๋ ์์น๊ฐ 1 Page ๋ณด๋ค ํฐ ๊ณณ์ ์์นํด ์์ด์ผ์ง '์ด ์ ์ผ๋ก ์ด๋' ์ด๋ผ๋ Logic์ด ํฉ๋ฆฌํ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋ฌผ์ด๋ณด๋ ๊ฒ์ด์์.
1๋ณด๋ค ํฌ๋ค๊ณ ํ๋ฉด this.nowPage --; ์ฆ nowPage์ ๊ฐ์ ํ๋ ๋นผ๊ฒ ๋ค๋ ์๋ฏธ์ธ ๊ฒ์ด์์.
๋ง์ฝ ์ด์ฉ์๊ฐ 5 Page์ ์๋ค๊ฐ ์ด ์ ์ด๋ ๋ฒํผ์ ๋๋ฅด๋ฉด 4 Page๋ก ์ด๋ํ๊ฒ ๋๋ ๊ฒ์ด์์.
์ด ์น๊ตฌ๋ ๋ฒํธ๋ฅผ Click ํจ์ผ๋ก ํด๋น Page๋ก ์ด๋ํ ์ ์๊ฒ ํด ์ฃผ๋ ๋ฒํผ์ธ ๊ฒ์ด์์. ์๊พธ ๋ฒํผ์ด๋ผ๊ณ ํ์ง๋ง ์์ฐํ ๋ฐ์ง๋ฉด button Tag๊ฐ ์๋๋ผ a Tag๋ก ๋ง๋ค์ด ์ก๊ธฐ ๋๋ฌธ์ button์ ์๋ ๊ฒ์ด์์. ๊ทธ๋ ๋ค๊ณ link๋ฅผ ํตํด ์ด๋ํ๋ Logic๋ ์๋๋ ๊ทธ๋ฅ ๋ฒํผ์ด๋ผ๊ณ ํ๋ ๊ฒ์ด์์.
๋จผ์ v-for๋ฅผ ํตํด rangeํจ์๋ฅผ ํธ์ถ ํ๋๋ฐ, startPage์ ๋ณ์๊ฐ๊ณผ endPage ๋ณ์์ ๊ฐ์ ์ ๋ฌํด ์ฃผ๋ ๊ฒ์ด์์.
data() ์์ Member ๋ณ์๋ค์ด ์๋ ๊ฒ์ด์์.
์ฌ์ค ์ด๊ฒ Member ๋ณ์๊ฐ ์๋๋ผ data Method return์ ์ ์๋ ๊ฐ์ฒด(Object)์ธ๋ฐ, JAVA๋ฅผ ๊ณต๋ถํ ์ฃผ๋ํ๋์ Member ๋ณ์๋ก ์ดํดํ๋ ๊ฒ์ด ํจ์ฌ ์ดํด๊ฐ ๋นจ๋ผ์ ์ด๋ ๊ฒ ์ด์ผ๊ธฐํ๋ ๊ฒ์ด๋ ์ฐฉ์ค ์๊ธธ ๋ฐ๋ผ๋ ๊ฒ์ด์์.
JAVA์์ Class์ Member ๋ณ์๋ฅผ ์ ์ธํ๊ณ , ์์ฑ์์์ ์ด๊ธฐํ๋ฅผ ํด ์ฃผ๋ฏ ์ด ๊ณณ์์ ์ ์ธ๊ณผ ์ด๊ธฐํ๋ฅผ ๋ชจ๋ ํ ์ ์๋ ๊ฒ์ด์์.
์ง๊ธ ๋ณด๋ฉด startPage๊ฐ 1์ด๊ณ , endPage๋ ์๋์ ๊ฐ์ด Method๊ฐ ํธ์ถ ๋๋ ๊ฒ์ด์์.
endPage๊ฐ ํธ์ถ ๋๋ฉด ๋ฌผ์ด ๋ฝ๋ ๊ฒ์ด์์. "rowCount(1 Page์ ์ถ๋ ฅ๋ ๊ฒ์๊ธ ๊ฐ ์)์ ๊ฐ์ด prevRowCount(์ด ์ Page์ ์ถ๋ ฅ๋ ๊ฒ์๊ธ ๊ฐ ์์ ๊ฐ์ง ์์ต๋๊น?" ๋ผ๊ณ ๋ง์ด์์. ๊ฐ์ง ์๋ค๋ฉด ํ์ฌ Page์์ ์ถ๋ ฅ๋ ๊ฒ์๊ธ ๊ฐ์๋ฅผ ์ด ์ Page์ ์ถ๋ ฅ๋ ๊ฒ์๊ธ ๊ฐ์์ ๋ฃ์ด์ฃผ๊ณ , setFirstPage()๋ฅผ ํธ์ถ ํ๋ ๊ฒ์ด์์.
๊ทธ๋ผ ๊ฒฐ๊ตญ 1 Page๋ก ์ด๋ํ๊ฒ ๋๋ ํจ๊ณผ๋ฅผ ๋ง๋ค ์ ์๋๊ฒ์ด์์.
๊ทธ๋ฐ ๋ค if๋ฌธ์ ๋น ์ ธ ๋์ startPage์ pageLismit(ํ Page ๋น ๋ณด์ฌ์ค ์ต๋ Data ๊ฐ์)์ 1์ ๋บ ๊ฐ์ check์ ๋ฃ์ด ์ฃผ๊ณ , ํด๋น check์ this.totalPage ์ฆ, ์ด Page ๊ฐ์ ๊ฐ ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด check ๋ณ์๋ฅผ ๋ฐํํ๊ณ , ์๋๋ฉด ์ด Page ๊ฐ์ ๊ฐ์ ๋ฐํ ํด ์ฃผ๋ ๊ฒ์ด์์.
๊ทธ๋ผ ์ด์ startPage์ ๊ฐ๊ณผ endPage์์ ๋ฐํ๋ ๊ฐ์ ๊ฐ์ง๊ณ , range()๊ฐ ํธ์ถ์ด ๋๊ณ ,
range()๋ lodash ํ์์ range()๋ฅผ ์ด์ฉํด์ ์์ Page๊ฐ๊ณผ ๋งค๊ฐ ๋ณ์๋ก ๋ค์ด์จ end Page๊ฐ์ 1์ ๋ํ ๋ฒ์๋ฅผ ๋ฐํ ํด ์ฃผ๋ ๊ฒ์ด์์.
๊ทธ๋ผ ์๋ฅผ ๋ค์ด 1 ~ 10์ด๋ผ๋ ๋ฒ์๊ฐ ๋ง๋ค์ด์ก๋ค๊ณ ๊ฐ์ ํ ๋ `Panation.vue Paging ์ฒ๋ฆฌ ๋ถ` ๊ทธ๋ฆผ 18๋ฒ์งธ๋ก ๋์์์ ํด๋น ๋ฒ์๋ฅผ ํ๋์ฉ i์ ๋ฃ์ด์ฃผ๋ฉด์ ๋ฐ๋ณต์ ํ๊ฒ ๋๊ณ , ํด๋น ๋ฐ๋ณต์ Unique ๊ฐ์ i๋ก ์ค์ ์ ํด ์ค ๋ค classActive()๋ฅผ ํธ์ถํ๋๋ฐ, i์ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด์ ๊ณ์ ๋ฐ๋ณตํ๋ ๊ฒ์ด์์.
์ด ์น๊ตฌ๋ ๋ ๋ค์ด์ค๋ฉด ๋ฌผ์ด๋ณด๋ ๊ฒ์ด์์. "i๊ฐ ์ด์ฉ์๊ฐ ์์นํ ํ์ฌ Page (this.nowPage)์ ๊ฐ๋์?" ๋ฌผ์ด๋ณด๊ณ , ๋ง๋ค๋ฉด "active"์ ๋ฐํํด ์ฃผ๊ฒ ๋์ด ์๋ ๊ฒ์ด์์.
๊ทธ๋ ๊ฒ 1 ~ N๋ฒ๊น์ง์ ๋ฒํธ ์์ ๋ชฉ๋ก์ ๋ง๋ค์ด์ฃผ๊ณ , ๊ทธ ์์ <a>๋ฅผ ์ด์ฉํด์ Click Event๊ฐ ๋ฐ์ํ๋ฉด i ๊ฐ์ ๊ฐ์ง๊ณ setPage() ๊ฐ ํธ์ถ ๋๊ฒ ํ ๊ฒ์ด์์.
ํด๋น ๋ฒํธ๋ฅผ ๋๋ ๋ค๋ ๊ฒ์ ์ด์ฉ์๊ฐ ํด๋น Page๋ก ์ด๋ํ๊ฒ ๋ค๋ ์๋ฏธ์ธ ๊ฒ์ด์์. ๊ทธ ์ฒ๋ฆฌ๋ฅผ setPage()๊ฐ ํด ์ฃผ๋ ๊ฒ์ด์์.
์ด์ฉ์๊ฐ ๋๋ฅธ Page ๋ฒํธ๊ฐ ๋งค๊ฐ ๋ณ์๋ก ๋ค์ด์ฌ ๊ฒ์ด๊ณ , Member ๋ณ์ (Data()์ ์ ์ ๋ nowPage Object)์ ๊ฐ์ ๋งค๊ฐ ๋ณ์ ๊ฐ์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ณ , changePage()๋ฅผ ํธ์ถ ํ๋ ๊ฒ์ด์์.
๊ทธ๋ผ ์ด์ฉ์๊ฐ ์ํ๋ Page๋ก ์ด๋์ด ๋ ๊ฒ์ด์์.
`Panation.vue Paging ์ฒ๋ฆฌ ๋ถ` 20 ~ 22๋ฒ์งธ ์ค์ ๋ณด๋ฉด ํด๋น ๋ฒํผ(<a>)๋ ์ด ์กฐ๊ฑด์ ๋ง์กฑํ ๋๋ง ๋ณด์ด๋ ๊ฒ์ด์์.
i๊ฐ ํ์ฌ ์ด์ฉ์๊ฐ ์์นํ Page(nowPage)๋ ๊ฐ์ง ์๋ค๋ฉด ํด๋น i์ ๊ฐ(์ ์)๋ฅผ ๋ณด์ฌ์ฃผ๋ฉด์ ๋ฒํผ์ด ํ์ฑํ ๋๊ฒ ํ๊ณ , i๊ฐ ํ์ฌ ์ด์ฉ์๊ฐ ์์นํ Page(nowPage)๋ ์์น๊ฐ ๊ฐ๋ค๋ฉด ์จ๊ธฐ๋ผ๋ ๊ฒ์ด์์.
์ด์ฉ์๊ฐ ์์นํ ๊ณณ์ ๋ฒํธ๊ฐ ๊ตณ์ด ํ์๋์ ๋ ๋๋ฅด๊ฒ ํ ์ ์์ ํ์๋ ์๊ธฐ ๋๋ฌธ์ธ ๊ฒ์ด์์.
์ ์ด์ ๋ค์ Page๋ก ๋์ด๊ฐ๊ฒ ํด์ฃผ๋ Button์ ํ๋ฒ ๋ง๋ค์ด ๋ณผ ๊ฒ์ด์์.
ํด๋น ๋ฒํผ์ ๋๋ฅด๊ฒ ๋๋ฉด nextPage()๊ฐ ํธ์ถ ๋๊ฒ ๋๋๋ฐ, ์ด๋ค ์ผ์ด ๋ฒ์ด์ง๊น์?
console.log๋ ํ์ธ์ ์ํ Code์ด๊ธฐ ๋๋ฌธ์ ๋์ด๊ฐ๊ณ , ์ด์ ๋ if๋ฌธ์ผ๋ก ๋ฌผ์ด๋ณด๋ ๊ฒ์ด์์.
"์ด์ฉ์ ์์น Page(nowPage)๊ฐ ์ด Page ์(total.Page)๋ณด๋ค ์์ต๋๊น?"
"๋ง์ฝ ๊ทธ๋ ๋ค๊ณ ํ๋ค๋ฉด ์ด์ฉ์ ์์น๋ฅผ ํ๋ ๋ํ Page์ ์ด๋ ์ํค๊ธฐ ์ํด nowPage ๊ฐ์ ํ๋ ๋ํ๊ฒ ์ต๋๋ค" ๋ผ๋ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ๋์ ๋ ๋ฌผ์ด๋ณด๋ ๊ฒ์ด์์.
"๊ทธ๋ฆฌ๊ณ ํ์ฌ ์ด์ฉ์ ์์น ๊ฐ(nowPage)์ด ๋ง์ง๋ง Page(endPage) ๋ณด๋ค ํฐ๊ฐ์? ๊ทธ๋ ๋ค๋ฉด nowPageBlock์ ๊ฐ์๋ฅผ ํ๋ ๋ํ๊ณ , ํ์ฌ ์ด์ฉ์ ์์น Page๋ฒํธ๋ฅผ ์์ Page(startPage)์ ๋ฃ๋๋ก ํ๊ฒ ์ต๋๋ค"
๊ทธ๋ฆฌ๊ณ , changePage()๋ฅผ ํธ์ถํ์ฌ nowPage๊ฐ์ ์กฐ์ ํด ์ด์ฉ์ ์์น๋ฅผ ๋ณํ ์์ผ ์ฃผ๋ ๊ฒ์ด์์.
์ด์ ๋ง์ง๋ง์ผ๋ก ์ด ์น๊ตฌ๋ฅผ ๋ง๋ค์ด ๋ณผ ๊ฒ์ด์์.
click Event๊ฐ ๋ฐ์๋๋ฉด lastPage()๊ฐ ํธ์ถ์ด ๋๋ ๊ฒ์ด์์.
์ผ๋จ ์ด Method๊ฐ ํธ์ถ๋๋ฉด ์ด Page ๊ฐ์(totalPage)๊ฐ์ ํ์ฌ ์ด์ฉ์ ์์น Page(nowPage)์ ๋ฃ์ด์ฃผ๊ณ , nowPageBlock์ lodashํ์์ ceil์ ์ด์ฉํ์ฌ ์ด Page ๊ฐ์(totalPage)๋ฅผ pageLimit์ ๋๋ ์ ๋์จ ๊ฐ์ ๋ฐ์ฌ๋ฆผํ๋ ๊ฒ์ด์์.
๊ทธ๋ฐ ๋ค ์์ Page(startPage)์ (nowPageBlock์ 1์ ๋บ ๊ฐ)๊ณผ pageLimit์ 1์ ๋ํ ๊ฐ์ ์๋ก ๊ณฑํ ๊ฒ์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด์์.
๊ทธ๋ฐ ๋ค changePage()๋ฅผ ํธ์ถํ์ฌ ๋งจ ๋ง์ง๋ง Page๋ก ์ด๋ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ด๋๋๋ค.