티스토리 뷰
교재 : [Angular Development with TypeScript]
링크 : https://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9791186710159
*Angular에 대해서 alpaco 사이트에서 학습하고 내용을 정리하였습니다.
Chapter02. 라우터로 내비게이션 구현하기
학습목표 :
1. Angular 라우터의 구성 요소에 대해 설명할 수 있다.
→Router:라우터를 구현하는 객체다. 원하는 경로로 이동하려면 이 객체의 navigate() 함수와 navigateByUrl() 함수를 사용하거나, 라우터 객체의 path 프로퍼티 값을 변경하면 된다. 브라우저의 URL을 직접 수정해도 원하는 경로로 이동할 수 있다.
RouterLink: HTML 앵커 태그(<a>)의 원래 용도는 브라우저의 URL 주소를 변경하는 것이지만, RouterLink 디렉티브를 사용하면 앵커 태그가 Angular 라우터를 통하도록 기능을 변경할 수 있다. RouterLink를 사용하면 라우터가 렌더링할 컴포넌트에 인자를 전달할 수도 있다.
2. Angular에서 주소를 관리하는 위치 정책에 대해 설명할 수 있다.
→HashLocationStrategy(해시 기반 내비게이션 정책): URL에 해시 기호(#)를 사용해서 해시 기호 이후의 부분은 웹페이지의 특정 부분을 가리키도록 라우팅하는 정책이다. 이 방식은 오래된 브라우저에서도 잘 동작한다.
PathLocationStrategy(방문 기록 API 기반 내비게이션 정책): 브라우저의 방문 기록 API를 사용하는 정책이며 HTML5를 지원하는 브라우저에서만 동작한다. 이 정책이 Angular 라우터의 기본 정책이다.
3. Angular가 지원하는 Shadow DOM 모드에 대해 설명할 수 있다.
→ViewEncapsulation.Emulated: Angular 프레임워크가 제공하는 방식으로 Shadow DOM을 캡슐화한다(기본값). 이 방식에서는 HTML 엘리먼트에 어트리뷰트를 추가해서 이 컴포넌트의 스타일이 전역 DOM의 스타일에 영향을 주지 않도록 한다.
ViewEncapsulation.Native: 브라우저에서 지원하는 Shadow DOM을 사용한다. 이 경우에는 컴포넌트의 HTML과 스타일은 웹 페이지의 DOM과 별개로 존재한다. 이 옵션은 브라우저에서 Shadow DOM을 지원하는 것이 확실할 때만 사용해야 하며, 지원하지 않는 경우에는 에러가 발생한다.
ViewEncapsulation.None: Shadow DOM 캡슐화를 사용하지 않으며, 컴포넌트의 모든 HTML과 스타일을 전역 웹 페이지 DOM에 포함시킨다. 이 경우에는 Shadow Host가 없기 때문에 :host 셀렉터도 동작하지 않는다. 이때 :host 셀렉터 대신 컴포넌트 자신의 셀렉터를 사용할 수 있다.
학습내용 :
학습요약 :
• 브라우저의 주소 표시줄은 언제나 현재 뷰의 URL을 표시한다. URL은 여러 구성 요소로 나누어 볼 수 있는데, 프로토콜은 시작해서 도메인 이름이 있고, 그 뒤에 포트 번호가 붙기도 한다. HTTP GET 요청은 아래와 같이 URL 뒤에 물음표를 붙여 서버에 인자를 전달할 수도 있다.
http://mysite.com:8080/auction?somParam=123
• SPA는 서버에 요청을 보내지 않고도 URL을 변경할 수 있기 때문에, 애플리케이션에서는 이 주소를 기준으로 클라이언트의 상황에 맞는 뷰를 표시할 수 있다. Angular에서 주소를 관리하는 위치 정책은 다음과 같은 방식이 있다.
HashLocationStrategy(해시 기반 내비게이션 정책) - URL에 해시 기호(#)를 사용해서 해시 기호 이후의 부분은 웹페이지의 특정 부분을 가리키도록 라우팅하는 정책이다. 이 방식은 오래된 브라우저에서도 잘 동작한다.
PathLocationStrategy(방문 기록 API 기반 내비게이션 정책) - 브라우저의 방문 기록 API를 사용하는 정책이며 HTML5를 지원하는 브라우저에서만 동작한다. 이 정책이 Angular 라우터의 기본 정책이다.
• Angular 라우터는 다음과 같은 요소로 구성한다.
Router - 라우터를 구현하는 객체다. 원하는 경로로 이동하려면 이 객체의 navigate() 함수와 navigateByUrl() 함수를 사용하거나, 라우터 객체의 path 프로퍼티 값을 변경하면 된다. 브라우저의 URL을 직접 수정해도 원하는 경로로 이동할 수 있다.
RouterOutlet - 라우터가 컴포넌트를 렌더링하는 영역인 <router-outlet>을 구현하는 디렉티브다.
Routes - 특정 URL에 연결되는 컴포넌트를 지정하는 배열이다.
RouterLink - HTML 앵커 태그(<a>)의 원래 용도는 브라우저의 URL 주소를 변경하는 것이지만, RouterLink 디렉티브를 사용하면 앵커 태그가 Angular 라우터를 통하도록 기능을 변경할 수 있다. RouterLink를 사용하면 라우터가 렌더링할 컴포넌트에 인자를 전달할 수도 있다.
ActivatedRoute - 현재 동작하는 라우터 인스턴스를 가리키는 객체다.
• 라우터와 같은 Angular 프레임워크 구성요소는 TypeScript에서 제공하는 어노테이션 문법을 사용해서 설정한다. 따라서 코드는 TypeScript로 작성하고, 이 코드가 브라우저에 로드될 때 SystemJS를 사용해서 JavaScript 코드로 변환해서 실행하는 방식을 사용한다.
• Angular에서는 Location 클래스를 제공하는데, 이 클래스의 go() 함수를 이용해서 원하는 절대 경로로 이동하거나, forward(), back() 함수를 이용할 수도 있다.
• Shadow DOM은 컴포넌트의 캡슐화를 확실하게 보장하지만 아직 모든 브라우저에서 Shadow DOM을 지원하는 것은 아니기 때문에, Angular는 자체적으로 Shadow DOM을 구현하고 있다.
• 딥 링킹(Deep linking)
어떤 웹 페이지를 가리키는 링크를 만드는 것에서 좀 더 나아가, 웹 페이지의 특정 내용으로 접근하는 링크를 만드는 것을 딥 링킹이라고 한다.
• Shadow DOM은 웹 컴포넌트 표준 중 하나다. 이 표준에 따르면 모든 웹 페이지는 DOM 객체의 계층으로 구성하지만, Shadow DOM은 전역 DOM과 분리된 별개의 DOM 계층을 구성한다. 그리고 이 Shadow DOM은 HTML 문서에 포함되어 렌더링되지만, HTML 문서에 해당하는 전역 DOM에서 Shadow DOM 내부의 엘리먼트에 접근할 수 없다.
• Angular가 지원하는 Shadow DOM
ViewEncapsulation.Emulated - Angular 프레임워크가 제공하는 방식으로 Shadow DOM을 캡슐화한다(기본값). 이 방식에서는 HTML 엘리먼트에 어트리뷰트를 추가해서 이 컴포넌트의 스타일이 전역 DOM의 스타일에 영향을 주지 않도록 한다.
ViewEncapsulation.Native - 브라우저에서 지원하는 Shadow DOM을 사용한다. 이 경우에는 컴포넌트의 HTML과 스타일은 웹 페이지의 DOM과 별개로 존재한다. 이 옵션은 브라우저에서 Shadow DOM을 지원하는 것이 확실할 때만 사용해야 하며, 지원하지 않는 경우에는 에러가 발생한다.
ViewEncapsulation.None - Shadow DOM 캡슐화를 사용하지 않으며, 컴포넌트의 모든 HTML과 스타일을 전역 웹 페이지 DOM에 포함시킨다. 이 경우에는 Shadow Host가 없기 때문에 :host 셀렉터도 동작하지 않는다. 이때 :host 셀렉터 대신 컴포넌트 자신의 셀렉터를 사용할 수 있다.
• 라우팅 가드 동작은 다음과 같은 경우에 활용할 수 있다.
사용자가 인증을 한 후에만 라우팅을 수행하고, 인증을 하지 않았다면 인증을 하게 한다.
컴포넌트 몇 개로 만든 폼을 화면에 표시하고, 이 폼에 유효한 데이터를 입력한 경우에만 내비게이션을 허용한다.
라우터에서 빠져나갈 때 저장하지 않은 정보가 있는 것을 사용자에게 알린다.
• 라우터는 모듈에서 설정한다.
• 라우터는 주소와 컴포넌트를 매핑한다.
• 라우터와 연결된 컴포넌트가 렌더링되는 위치는 컴포넌트 템플릿에서 <router-outlet> 태그로 지정한다.
• routerLink는 라우터 이름을 지정해서 사용할 수도 있다.
• nevigate() 함수를 사용할 때도 라우터 이름을 지정할 수 있다.
• 라우터를 통해 인자를 전달하려면 라우터 설정의 path 프로퍼티가 인자를 받도록 지정해야 하며, 이 값은 routerLink나 navigate() 함수를 사용할 때 전달된다.
• 라우터를 통해 인자를 받으려면 인자를 받는 컴포넌트의 생성자에 ActivatedRoute를 의존성으로 주입하고 이 객체를 통해 값을 참조해야 한다.
• 라우터를 여러 계층으로 구성하려면 Routes 인터페이스를 정의할 때 children 프로퍼티로 지정한다.
• 라우터에 이름을 지정해서 사용하면 여러 개의 라우터를 동시에 사용할 수 있다.
'웹개발 > Angular' 카테고리의 다른 글
[Angular] 05. 컴포넌트 통신과 폼 처리하기 (436) | 2018.09.08 |
---|---|
[Angular] 04. 바인딩, 옵저버블, 파이프 (0) | 2018.08.26 |
[Angular] 03. 의존성 주입 (0) | 2018.08.26 |
[Angular] 01. Angular 시작하기 (0) | 2018.08.13 |
angular2에서 jquery 사용하기 (0) | 2017.07.17 |
- Total
- Today
- Yesterday
- password validation
- paralles desktop
- jQuery
- Grunt
- git merge
- typeScript
- 아이오닉2
- 폼 유효성 검사
- 의존성 주입
- Facebook AccountKit
- 옵저버블
- phone number
- 번들링
- ionic2
- Angular
- git commit
- Webpack
- NgForm
- 한영 변환
- 아이오닉
- End-to-End testing
- Typescript 패키지
- 웹 소켓 프로토콜
- Gulp
- Routes
- Angular CLI
- git branch
- npm
- module exports
- angular2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |