Angular 2 구성 요소 소개
구성 요소는 Angular 2 응용 프로그램의 기본 구성 요소이며 응용 프로그램에는 여러 구성 요소가 있을 수 있습니다. 구성 요소를 자체 논리와 데이터가 있는 응용 프로그램의 특정 보기로 간주할 수 있습니다.
구성 요소는 Angular 2 응용 프로그램의 기본 구성 요소이며 응용 프로그램에는 여러 구성 요소가 있을 수 있습니다. 구성 요소를 자체 논리와 데이터가 있는 응용 프로그램의 특정 보기로 간주할 수 있습니다.
AngularJS 1.0에서는 데이터와 로직을 뷰에 묶거나 뷰에 커스텀 요소를 생성하는 컨트롤러, $Scope, 디렉시브 개념이 있었습니다. Angular 2에서는 구성 요소들이 컨트롤러, 범위, 지시가 수행하던 모든 작업을 수행합니다. 데이터, 논리, 사용자 지정 요소 모두 Angular 2의 컴포넌트를 통해 생성하거나 추가할 수 있습니다.
Angular 두 가지 애플리케이션은 컴포넌트를 중심으로 구축되어 있으며, 컴포넌트는 다음과 같은 관점으로 볼 수 있습니다:
- 주형
- Application Data
- Logic
- 스타일 등 다양한 주제
첫 번째 구성 요소를 만들어봅시다
페이지에 "Hello World"를 표시하는 아주 간단한 컴포넌트를 만드는 것부터 시작해 보겠습니다.
appcomponent.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-container',
template: `<h1>{{message}}</h1>`
})
export class AppComponent {
message : string = "Hello World";
constructor() {
}
}
구성 요소를 만드는 데는 주로 세 단계가 있습니다
- 클래스를 만들고 내보냅니다. 이 클래스에는 데이터와 논리가 포함됩니다.
- 수업을 @component 메타데이터로 꾸미세요. 기본적으로 메타데이터는 컴포넌트를 설명하고 다양한 속성의 값을 설정하므로, TypeScript 클래스를 Angular 2 컴포넌트로 사용할 수 있게 합니다.
- 필요한 라이브러리와 모듈을 가져와 구성 요소를 만듭니다.
위에서 논의한 세 단계는 아래 도표에서 시각화할 수 있습니다:

보시다시피, Angular 2 구성 요소는 다음과 같습니다:
- 데이터와 논리를 저장하는 TypeScript 클래스;
- 앱 내 데이터를 표시할 수 있는 HTML 템플릿과 스타일. 이것은 사용자가 화면에서 보고 상호작용하는 뷰라고도 불립니다.
- 구성 요소의 동작을 정의하는 메타데이터입니다. 구성 요소 메타데이터는 @Component 데코레이터를 통해 클래스에 적용됩니다. 구성 요소의 다양한 동작은 객체의 속성으로 전달될 수 있으며, 이는 @Component 데코레이터의 입력 매개변수입니다.
이제 두 가지 구성 요소의 세 부분 Angular 자세히 살펴보겠습니다.
TypeScript Class in a Component
TypeScript 클래스는 타입이며, 컴포넌트의
- data
- Logic
- 행동
CalculatorComponent를 생성하는 데 사용되는 TypeScript 클래스는 다음 목록에 나타난 것처럼 만들 수 있습니다:
export class CalculatorComponent{
num1: number ;
num2 : number;
result : number;
add():number{
this.result = this.num1 + this.num2;
return this.result;
};
sub():number {
this.result = this.num1 - this.num2;
return this.result;
}
}
사용자는 다양한 바인딩을 사용하여 구성 요소 클래스의 동작을 읽고, 수정하며, 호출할 수 있습니다:
- 보간
- 속성 바인딩
- 이벤트 바인딩
- Two-way binding
@Component Decorator
TypeScript의 @Component 데코레이터는 TypeScript 클래스를 컴포넌트로 장식합니다. 이는 객체를 매개변수로 받아들이는 함수입니다. @Component 데코레이터에서는 다양한 속성의 값을 설정하여 컴포넌트의 동작을 설정할 수 있습니다. 가장 많이 사용되는 특성은 다음과 같습니다:
- 주형
- TemplateUrl
- 지시문
- 공급자
- 스타일
- StyleUrls
- 파이프
- Selector etc.
위에서 언급한 특성들 외에도 다른 특성들이 있습니다. 이제 이 중요한 특성들을 하나씩 살펴보겠습니다.
템플릿 및 템플릿URL
템플릿은 페이지에 렌더링되는 컴포넌트의 일부입니다. 템플릿은 두 가지 방법으로 만들 수 있습니다:
- 인라인 템플릿
- 외부 파일 내 템플릿
인라인 템플릿은 아래에 표시되어 생성될 수 있습니다:
@Component({
moduleId: module.id ,
selector: "app-container",
template:`
<h1>{{ message}}</h1>
`,
styles:["h1{color:red}"]
})
여기서 주목할 만한 중요한 점은 템플릿에서 여러 줄을 만들 때 사용하는 틸트 심볼입니다. 단일 인라인 템플릿은 단일 따옴표 또는 이중 따옴표를 사용하여 만들 수 있습니다.
복잡한 뷰는 인라인 템플릿 대신 외부 HTML 파일에 넣어야 한다는 데 동의합니다. Angular 2는 템플릿을 외부 HTML 파일에 넣을 수 있게 해주며, 템플릿 URL 속성의 값을 설정하여 컴포넌트와 연결할 수 있습니다. 관례상 템플릿과 컴포넌트는 같은 폴더에 두는 것이 더 좋습니다.
@Component({
moduleId: module.id ,
selector: "app-container",
templateUrl: '/app/calculators/calculator.component.html',
styles:["h1{color:red}"]
})
컴포넌트의 moduleId 속성을 설정하면 전체 경로를 주는 것을 피할 수 있습니다.
Selector
컴포넌트는 셀렉터를 사용해 사용할 수 있습니다. 위 예시에서 셀렉터 속성은 < app-container>로 설정되어 있습니다.페이지 내 컴포넌트나 다양한 뷰를 사용할 수 있습니다.

스타일과 스타일 URL
컴포넌트는 자체 스타일을 가질 수도 있고, 다양한 외부 스타일 시트를 참조할 수도 있습니다. 스타일을 다루기 위해 @Component 메타데이터는 styles와 styleUrls 속성을 가집니다. 아래 목록처럼 styles 속성의 값을 설정하여 인라인 스타일을 만들 수 있습니다:
@Component({
moduleId: module.id ,
selector: "app-container",
template:`
<h1>{{ message}}</h1>
`,
styles:["h1{color:red}"],
})
컴포넌트는 styleUrls 속성의 값을 설정하여 다양한 외부 파일을 참조할 수 있습니다.
@Component({
moduleId: module.id ,
selector: "app-container",
template:`
<h1>{{ message}}</h1>
`,
styleUrls:['app.component.css','./app/productorder.css']
})
공급자
실제 애플리케이션에서는 컴포넌트가 다양한 Angular 2 서비스나 맞춤형 서비스를 사용합니다. 컴포넌트에서 서비스를 사용하려면 두 단계를 따라야 합니다:
- 컴포넌트에서 서비스를 가져오고,
- 메타데이터에서 제공자 속성의 값을 설정하세요.
컴포넌트 메타데이터는 제공자(provider)라는 배열 타입 속성을 가집니다. 제공자 내에서는 컴포넌트에서 사용되는 서비스 목록을 전달합니다. 예를 들어, 다음 목록에서는 컴포넌트에 두 개의 서비스를 전달하고 있습니다: CalService와 InvoiceService.
@Component({
moduleId: module.id ,
selector: "app-container",
template:`
<h1>{{ message}}</h1>
`,
providers:['CalService','InvoiceService']
})
Angular2에서 제공하는 서비스나 커스텀 서비스를 사용하려면 이 서비스들을 가져와서 메타데이터에서 제공자의 값으로 전달해야 합니다.
명령으로서의 중첩 구성 요소
Angular 2는 컴포넌트를 다른 컴포넌트 안에 사용할 수 있게 해줍니다. 컴포넌트 안에 컴포넌트를 사용할 때, 중첩된 컴포넌트라는 개념이 생깁니다. 중첩된 컴포넌트를 사용하려면 컴포넌트 메타데이터의 directives 속성을 사용해야 합니다.
중첩된 컴포넌트를 어떻게 활용할 수 있을지 살펴보겠습니다. TasksComponent라는 컴포넌트가 있고, 이 컴포넌트를 AppComponent 내에서 사용하고 싶다고 가정해 봅시다. TasksComponent(자식 컴포넌트)를 AppComponent(부모 컴포넌트)의 중첩 컴포넌트로 사용하는 단계는 다음과 같습니다
- 부모 컴포넌트에서 자식 컴포넌트를 가져오기
- 자식 컴포넌트를 부모 컴포넌트 템플릿의 셀렉터로 사용하세요
- 부모 컴포넌트의 지시적 속성 값을 자식 컴포넌트에 설정합니다
아래 목록에서 보시다시피, 우리는 자식 컴포넌트인 TaskComponent를 가져오고, 이를 AppComponent에서 지시문으로 사용하고 있습니다. 컴포넌트를 중첩된 컴포넌트로 사용하려면 directives 속성의 값을 설정해야 합니다.
import { Component } from '@angular/core';
import {TasksComponent} from './task/tasks.component';
@Component({
selector: 'app-container',
template: `{{message}}<tasks></tasks>`,
directives:[TasksComponent]
})
부모 컴포넌트에서 자식 컴포넌트로, 또는 그 반대로 데이터를 전달해야 하는 상황이 있을 수 있지만, 이에 대해서는 추가 블로그 게시물에서 자세히 다룰 예정입니다.
이렇게, 컴포넌트를 자식 컴포넌트로 사용하거나 부트스트랩으로 사용할 수 있습니다. 이 두 가지 구성 요소에 Angular 관한 소개 글이 도움이 되길 바라며, 읽어주셔서 감사합니다!