Stories.pe.kr
여행과 요리에 관한 이야기
Stories.pe.kr
여행과 요리에 관한 이야기

Angular에 대한 세부적인 포스팅을 하기 전에 먼저 간단하게 개요를 정리 합니다. Angular란? 구글에서 만든 open-souce web application SPA(Single Page Application) 개발이 가능 다양한 플랫폼에 맞게 개발 가능 유지보수, 개발 속도 향상 (데이터 바인딩, 템플릿 등의 문법 제공 ) 아키텍쳐 Angular의 구성요소 Angular2를 구성하는 요소는 크게 4가지 입니다. 컴포넌트 (Component) 모듈 (Module) 서비스 (Service) 지시자 (Directive) […]
Angular에 대한 세부적인 포스팅을 하기 전에 먼저 간단하게 개요를 정리 합니다.

Angular2를 구성하는 요소는 크게 4가지 입니다.

import { component } from '@angular/core';
@Compoent({
// component element 이름
selector: 'ex-compoent',
// view html (or templateUrl)
template: '<div>{{msg}}</div>',
// css code (or styleUrls)
styles: [`div {color: red}`]
})
export class MyComponent {
msg: string = "hello";
}

| 바인딩 방향 | 입력방식 | 문법 |
|---|---|---|
| 단방향 | 표현식 | {{표현식}}, [target] = “표현식”, bind-target=”표현식” |
| 단방향 | 명령식 | (target) = “명령식”, on-target = “명령식” |
| 양방향 | 표현식 | [(target)] = “표현식”, bindon-target = “표현식” |

컴포넌트에서는 템플릿으로 Property값으로 바인딩을 하고 템플릿에서는 컴포넌트로 이벤트로 바인딩을 함.
component –> template
import { component } from '@angular/core';
// component
@Compoent({
template: `<div>{{name}}</div>`
})
class ExComponent {
name: string = '아이언맨';
}
// 화면
component –> template
// parentsComponent
@Compoent({
template: `<exComponent [name]="name"/>`
})
class ParentsComponent {
name: string = '아이언맨';
}
// exComponent
@Compoent({
selector: 'exComponent'
template: `<div>{{name}}</div>`
})
class ExComponent {
@Input() name: string;
}
// exComponent 화면
component <– template
// compoent
@Compoent({
template: `<div (click)="testClick('로보트')">click</div>`
})
class ExComponent {
testClick(name) {
console.log(`나는 ${name}입니다.`);
}
}
// 클릭시 console창에
/* 나는 로보트입니다. 표시 */
component <–> template
@Compoent({
template: `<input [(ngModel)]="name"> {{name}}`
})
class ExComponent {
name: string = '로보트'
}

export class MyComponent { }
import { MyComponent } from './MyComponent';
컴포넌트, 지시자, 파이프와 같은 구성 모듈을 통합적으로 관리할 수 있게 해줌@NgModule 장식자를 사용함기본구성
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
// ngModule decorator
@NgModule({
// import할 모듈 리스트(Angular 모듈, routing 모듈..)
imports: [ BrowserModule ],
// 모듈에 속하는 컴포넌트, 디렉티브(지시자), 파이프 클래스들의 리스트
declarations: [ AppComponent ],
// DI providers 리스트 (서비스 모듈...)
providers: [ Logger ],
// import하는 모듈이 쓸 수 있는 declarations 리스트
exports: [ AppComponent ],
// bootstrap 가능한 컴포넌트 리스트
bootstrap: [ AppComponent ],
// 어느 템플릿에서도 참조되지 않은 컴포넌트의 리스트
entryComponents: [ AppComponent ]
})
export class AppModule { }

로깅서비스 예제
export class Logger {
log(msg: any) { console.log(msg); }
error(msg: any) { console.error(msg); }
warn(msg: any) { console.warn(msg); }
}
export class HeroService {
private heroes: Hero[] = [];
constructor(
private _backend: BackendService,
private _logger: Logger) { }
getHeroes() {
this.backend.getAll(Hero).then( (heroes: Hero[]) => {
this.logger.log(`Fetched ${heroes.length} heroes.`);
this.heroes.push(...heroes); // fill cache
});
return this.heroes;
}
}

@Injectable()
class ExService {
plusNumber(a: number, b:number) {
return a + b;
}
}
@Compoent({
...
})
class ExComponent {
// 아래와 같이 의존성 주입을 한다.
constructor(private _exService: ExService) {}
plusNumber(a: number, b: number) {
console.log(this._exService.plusNumber(a, b));
}
}
import { Directive, ElementRef, Renderer } from '@angular/core';
@Directive ({
selector: '[helloStyle]',
})
export class HelloStyleDirective {
constructor (private el: ElementRef, private renderer: Renderer) { }
...
}
▲ 위의 형태로 지시자를 정의함
@Compoent({
selector: 'my-Component',
template: '<div helloStyle ></div>'
})
▲ 정의된 지시자를 위의 예제처럼 helloStyle로 사용함.