티스토리 뷰
1. 이 포스트는 bootstrap을 이용하여 수동으로 pagenation을 구현하는 내용이다.
1-1 사실 ng-bootstrap에서 pagenation 기능을 제공하므로 굳이 이렇게 구현할 필요는 없다.
2. component template
2-1 bootstrap 공식 홈페이지의 코드를 그대로 사용하였다. 복붙
2-2 중간에 ng-container가 나온는데, 이것은 li테그에 2개의 ng directive를 사용할 수 없기 때문이다.
2-3 [ngClass]에 지정할 class들은 getClass라는 별도의 메소드를 통하여 지정하고 있다.
2-3-1 메소드 내에서 여러 개의 if문으로 필요한 class들을 채워서 반환하는 테크닉은 표준적으로 사용된다.
2-3-2 ngFor의 let i=index는 예전에도 언급했지만 for문에 대한 부가적인 정보를 얻을 수 있다.
2-3-3 아래에서는 현재 위치가 어디인지를 보여주는 active클래스를 지정하기 위해 사용하고 있다.
2-4 prev, next는 인덱스의 위치에 따라서 disabled 시키고 있다.
2-5 페이지가 너무 많을 경우는 원하는 페이지 갯수만큼만 표출해야 한다.
2-5-1 아래는 10개를 기준으로 보여주고 있고 현재 단위별로 보여주도록 floor 값을 활용하고 있다.
2-5-2 이 기능을하는 메소드가 checkWindowIndex인데, 이 메소드도 다른 테그처럼 이벤트에 바로 구현할 수 있지만,
2-5-2-1 Math.floor같은 내장함수는 component template 표현에서는 사용할 수 없기 때문에 메소드를 생성했다.
<div class="container">
<nav>
<ul class="pagination">
<li class="page-item" [ngClass]="{ disabled: currentPage === 0 }">
<a (click)="currentPage = currentPage - 1" class="page-link">Prev</a>
</li>
<ng-container *ngFor="let image of images; let i=index;">
<li [ngClass]="getClass(i)" class="page-item" (click)="currentPage = i" *ngIf="checkWindowIndex(i)">
<a class="page-link">{{ i+1 }}</a>
</li>
</ng-container>
<li class="page-item" [ngClass]="{ disabled: currentPage === images.length-1 }">
<a class="page-link" (click)="currentPage = currentPage + 1">Next</a>
</li>
</ul>
</nav>
<div>
<h4>{{ images[currentPage].title }}</h4>
<img [src]="images[currentPage].url" alt="">
</div>
</div>
3. component class
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
currentPage = 0
images = [
{
title: 'At the Beach',
url: 'https://images.unsplash.com/photo-1552379080-7bf7d131b129?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1050&q=80'
},
{
title: 'At the Beach',
url: 'https://images.unsplash.com/photo-1475503572774-15a45e5d60b9?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1050&q=80'
},
{
title: 'At the Beach',
url: 'https://images.unsplash.com/photo-1496046744122-2328018d60b6?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1064&q=80'
},
{
title: 'At the Beach',
url: 'https://images.unsplash.com/photo-1502860372601-2a663136d5a2?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1132&q=80'
},
{
title: 'At the Beach',
url: 'https://images.unsplash.com/photo-1552379080-7bf7d131b129?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1050&q=80'
},
{
title: 'At the Beach',
url: 'https://images.unsplash.com/photo-1475503572774-15a45e5d60b9?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1050&q=80'
},
{
title: 'At the Beach',
url: 'https://images.unsplash.com/photo-1496046744122-2328018d60b6?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1064&q=80'
},
{
title: 'At the Beach',
url: 'https://images.unsplash.com/photo-1502860372601-2a663136d5a2?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1132&q=80'
},
{
title: 'At the Beach',
url: 'https://images.unsplash.com/photo-1552379080-7bf7d131b129?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1050&q=80'
},
{
title: 'At the Beach',
url: 'https://images.unsplash.com/photo-1475503572774-15a45e5d60b9?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1050&q=80'
},
]
getClass(value: number): string[] {
const classes: string[] = []
if (value === this.currentPage) {
classes.push('active')
}
return classes
}
checkWindowIndex(value: number): boolean {
return Math.floor(this.currentPage/10) === Math.floor(value/10)
}
}
4. 결과화면
'Client Technologies > Angular' 카테고리의 다른 글
Angular : Custom Attribute(속성) Directive 생성하기 (0) | 2020.06.09 |
---|---|
Angular : if-else 구조적 Directive template 몇 개 (0) | 2020.06.09 |
Angular : Custom Pipe (0) | 2020.06.09 |
Angular : 유용한 Pipes (0) | 2020.06.09 |
Angular : npm Library 사용하기 (0) | 2020.05.15 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- form
- Angular
- spring boot
- RestTemplate
- one-to-one
- XML
- jsp
- Spring Security
- login
- WebMvc
- mapping
- Security
- Rest
- 스프링
- Many-To-Many
- 하이버네이트
- 스프링부트
- one-to-many
- 상속
- 매핑
- 설정하기
- Spring
- Validation
- 설정
- hibernate
- 로그인
- MYSQL
- 자바
- crud
- 외부파일