Pagination
Pagination (페이지네이션)
한 페이지에 표시할 데이터가 너무 많으면 페이지네이션을 사용해요.
출처: 문서
본문
기본 사용법 (Basic usage)
표시하고 싶은 페이지네이션 요소들을 콤마로 구분해 layout으로 설정해요. 페이지네이션 요소는 다음과 같아요: prev (이전 페이지로 이동하는 버튼), next (다음 페이지로 이동하는 버튼), pager (페이지 목록), jumper (이동 입력), total (전체 항목 수), sizes (페이지 크기를 정하는 select), 그리고 -> (이 기호 뒤의 모든 요소는 오른쪽으로 당겨져요).
.example-pagination-block + .example-pagination-block {
margin-top: 10px;
}
.example-pagination-block .example-demonstration {
margin-bottom: 16px;
}
페이지네이터 수 (Number of pagers)
기본적으로 Pagination은 7페이지가 넘으면 추가 페이지 버튼을 접어요. pager-count 속성으로 설정할 수 있어요.
배경색 버튼 (Buttons with background color)
background 속성을 설정하면 버튼에 배경색이 생겨요.
작은 Pagination (Small Pagination)
공간이 제한된 경우 작은 페이지네이션을 사용해요. size를 설정해서 크기를 바꿔요. 여기 작은 예제가 있어요.
한 페이지일 때 숨김 (Hide pagination when there is only one page)
페이지가 하나뿐일 때 hide-on-single-page 속성을 설정해서 페이지네이션을 숨겨요.
import { ref } from 'vue'
const value = ref(false)
더 많은 요소 (More elements)
시나리오에 따라 더 많은 모듈을 추가해요. 이 예제는 완전한 사용 사례예요. size-change와 current-change 이벤트를 사용해서 페이지 크기 변경과 현재 페이지 변경을 처리해요. page-sizes는 정수 배열을 받는데, 각각은 sizes select 옵션의 서로 다른 페이지 크기를 나타내요. 예를 들어 [100, 200, 300, 400]은 select에 100, 200, 300, 400개 항목이라는 네 옵션이 있음을 뜻해요.
import { ref } from 'vue'
import type { ComponentSize } from 'element-plus'
const currentPage1 = ref(5)
const currentPage2 = ref(5)
const currentPage3 = ref(5)
const currentPage4 = ref(4)
const pageSize2 = ref(100)
const pageSize3 = ref(100)
const pageSize4 = ref(100)
const size = ref('default')
const background = ref(false)
const disabled = ref(false)
const handleSizeChange = (val: number) => {
console.log(`${val} items per page`)
}
const handleCurrentChange = (val: number) => {
console.log(`current page: ${val}`)
}
.demo-pagination-block + .demo-pagination-block {
margin-top: 10px;
}
.demo-pagination-block .demonstration {
margin-bottom: 16px;
}
API
Attributes
| Name | Description | Type | Default |
|---|---|---|---|
| size 2.7.6 | 페이지네이션 크기 | enum | 'default' |
| background | 버튼에 배경색이 있는지 여부 | boolean | false |
| page-size / v-model:page-size | 각 페이지의 항목 수 | number | — |
| default-page-size | page size의 기본 초기 값, 설정하지 않으면 10으로 설정한 것과 같아요 | number | — |
| total | 전체 항목 수 | number | — |
| page-count | 전체 페이지 수. total이나 page-count 중 하나를 설정하면 페이지가 표시돼요. page-sizes가 필요하다면 total이 필수예요 |
number | — |
| pager-count | 페이지네이터 수. 전체 페이지 수가 이 값을 초과하면 Pagination이 접혀요 | number | 7 |
| current-page / v-model:current-page | 현재 페이지 번호 | number | — |
| default-current-page | current-page의 기본 초기 값, 설정하지 않으면 1로 설정한 것과 같아요 | number | — |
| layout | Pagination의 레이아웃, 요소는 콤마로 구분 | string | prev, pager, next, jumper, ->, total |
| page-sizes | 페이지당 항목 수 옵션 | array | [10, 20, 30, 40, 50, 100] |
| append-size-to 2.8.4 | size 드롭다운이 붙는 요소 | string | — |
| popper-class | 페이지 크기 Select 드롭다운의 커스텀 클래스 이름 | string | '' |
| popper-style 2.11.5 | 페이지 크기 Select 드롭다운의 커스텀 스타일 | string / object | — |
| prev-text | prev 버튼 텍스트 | string | '' |
| prev-icon | prev 버튼 아이콘, prev-text보다 우선순위가 낮아요 | string / Component | ArrowLeft |
| next-text | next 버튼 텍스트 | string | '' |
| next-icon | next 버튼 아이콘, next-text보다 우선순위가 낮아요 | string / Component | ArrowRight |
| disabled | Pagination 비활성화 여부 | boolean | false |
| teleported 2.3.13 | Pagination select 드롭다운을 body로 텔레포트할지 여부 | boolean | true |
| hide-on-single-page | 페이지가 하나뿐일 때 숨길지 여부 | boolean | false |
| small deprecated | 작은 페이지네이션 사용 여부 | boolean | false |
WARNING 일부 deprecated 사용법을 감지해요. 페이지네이션이 나타나지 않거나 예상대로 동작하지 않으면 다음 규칙을 확인하세요:
total과page-count중 하나를 반드시 정의해야 해요. 그래야 전체 페이지 수를 결정할 수 있어요. 둘 다 정의하면page-count가 우선해요.current-page를 정의했다면@update:current-page도 정의해서 current-page 변경을 들어야 해요. 그렇지 않으면 페이지네이션이 동작하지 않아요.page-size를 정의하고 페이지 크기 선택기가 표시된다면(sizes가 layout에 포함)@update:page-size도 정의해서 page-size 변경을 들어야 해요. 그렇지 않으면 페이지 크기 변경이 동작하지 않아요.
Events
| Name | Description | Type |
|---|---|---|
| size-change | page-size가 변경될 때 트리거 | Function |
| current-change | current-page가 변경될 때 트리거 | Function |
| change 2.4.4 | current-page 또는 page-size가 변경될 때 트리거 | Function |
| prev-click | prev 버튼이 클릭되고 현재 페이지가 변경될 때 트리거 | Function |
| next-click | next 버튼이 클릭되고 현재 페이지가 변경될 때 트리거 | Function |
WARNING 위 이벤트는 권장하지 않지만(호환성 때문에 여전히 지원돼요),
v-model로 양방향 데이터 바인딩을 사용하는 편이 더 좋아요.
Slots
| Name | Description |
|---|---|
| default | 커스텀 내용. 사용하려면 layout에 slot을 선언해야 해요 |
더 알아보기 (Learn more)
- Infinite Scroll 컴포넌트 — 무한 스크롤
- Progress 컴포넌트 — 진행 바
- Select 컴포넌트 — 선택
- Element Plus 시작하기 — 프로젝트 설정