일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- 보안
- 부동산
- 쿠버네티스
- Games
- 이더리움
- 비트코인
- loopback
- 리뷰
- 암호화폐
- PC
- 젤다 왕눈
- 블록체인
- angular
- 탈중앙화
- Linux
- Docker
- kubernetes
- game
- strongloop
- review
- 시장
- 스마트 계약
- ps4
- Three
- 거래
- threejs
- 투자
- 스마트 컨트랙트
- 게임
- 주식
- Today
- Total
BaeBox
Dynamic(동적) Component 생성 본문
Angular 초심자인 나로서 앵귤러를 활용하면서 두번째로 크게 막혔던 것은 컴포넌트를 실행중에 동적으로 생성하는 것이었다.
분명 이런 기능은 제공할거라는걸 알긴 하는데 그걸 뭐라고 부르는지 몰라서 고생했다
사용법은 간단한다. 하단 링크에 있는 공식문서를 간단히 따라하면 된다.
요는, ComponentFactoryResolver 클래스가 제공하는 resolveComponentFactory 함수를 이용하는 것이다.
ComponentFactoryResolver 의 resolveComponentFactory 함수가 컴포넌트를 resolve 하고 createComponent 함수를 이용하여 컴포넌트를 생성한다.
생성까지는 어렵지 않았을거라고 생각한다.
여기서부터는 굳이 안 봐도 상관은 없지만, 개인적으로 흥미로웠기에 짚고 넘어간다.
Service 를 생성하여서 컴포넌트간 데이터를 공유하는 방법으로도 충분히 구현이 가능했겠지만, 아래와 같은 방식의 사용은 굉장히 흥미로웠다.
ComponentRef : Component Reference (컴포넌트 참조) 라는 뜻인데... 뭔가 좀 볼 구석이 있다.
instance 를 통해서 값을 주게 되면, 실제로 해당 컴포넌트(여기서는 ForBlogComponent)에 특정 변수가 존재하지 않아도 변수를 지정해 줄 수 있게 된다.
예를 들면, 상기 이미지에는 componentRef.instance.var='var-Value'; 라는 코드가 있는데 실제로 ForBlogComponent 에는 var 라는 변수가 존재하지 않지만, 그래도 생성된 컴포넌트에서 var 라는 값을 사용하는 구문이 있다면 아무런 문제 없이 사용이 가능하다!! 물론 tslint에서는 구문 오류라고 잡는다
그 외에도 componentRef.location.nativeElement.classList.add(`className`); 기능을 이용하면 클래스를 추가할 수 있다.
덤. 동적 로딩할 컴포넌트들이 lazyLoading되는 Module에 속해있다면 아래처럼 entryComponent 속성에 지정해주어야 한다.
https://angular.io/guide/dynamic-component-loader
https://angular.io/guide/dynamic-component-loader#resolving-components
'개발 관련' 카테고리의 다른 글
자바스크립트는 어떻게 동작하는가 시리즈.(펌) (0) | 2020.03.13 |
---|---|
HTML 을 PDF, PPT, Word 로 export 하는 방법 (0) | 2020.03.09 |
Component간 데이터 공유 (0) | 2020.03.02 |
Scapy를 이용한 packet(pcap) generation (0) | 2020.02.09 |
Brush와 Bisect (0) | 2020.01.29 |