์๋ ํ์ธ์ Foma ์ ๋๋ค!
์ค๋์ HTML ์๋ฆฌ๋จผํธ์ ๋ค์ํ ๋์์ ์ถ๊ฐํ๋ Directive์ ๋ํด์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~
Directive๋?
๋จผ์ ์ฌ์ ์ ์๋ฏธ๋ฅผ ๋ณด๋ฉด ์๋์ ๊ฐ์ด '์ง์' ๋ผ๋ ๋ป์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
Angular ๊ณต์ ๋ฌธ์์ Directive๋ฅผ ์๋์ ๊ฐ์ด ์๊ฐํฉ๋๋ค.
์ฆ, ๊ฐ๋จํ ๋งํ๋ฉด Directive๋ ์๋ฆฌ๋จผํธ๊ฐ ์ด๋ ํ ๋์์ ํ ์ ์๋๋ก '์ง์' ํ๋ ํด๋์ค ์ ๋๋ค.
Directive ์ข ๋ฅ
Directive๋ 3๊ฐ์ง ์ข ๋ฅ๊ฐ ์์ต๋๋ค.
1. Components
์ปดํฌ๋ํธ๋ ํ ํ๋ฆฟ์ด ์กด์ฌํ๋ Directive๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ Directive ์ ๋๋ค.
(์ปดํฌ๋ํธ๋ ๋์ค์ ๋ฐ๋ก ๊ธ์ ์ ๋ฆฌ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.)
2. Attrubute Directives
์ดํธ๋ฆฌ๋ทฐํธ ๋๋ ํฐ๋ธ๋ ์๋ฆฌ๋จผํธ, ์ปดํฌ๋ํธ์ ๋ชจ์ต์ด๋ ๋์์ ๋ณ๊ฒฝํ๋ Directive ์ ๋๋ค.
3. Structural Directives
์กฐ๊ฑด์ ๋ฐ๋ผ DOM ์๋ฆฌ๋จผํธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ Directive ์ ๋๋ค.
Built-in Directive
์ต๊ทค๋ฌ ์์ฒด์์ ๋ง๋ค์ด์ง Built-in Directive์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1. NgClass
ํด๋์ค ์ฌ๋ฌ๊ฐ๋ฅผ ์๋ฆฌ๋จผํธ์ ๋์์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
css
div {
color: black;
font-size: 14px;
}
div.error {
color: red;
}
div.important {
font-size: 20px;
}
div.invalid {
text-decoration: line-through;
}
html
์๋์ ๊ฐ์ด [ngClass]๋ก ๋ฐ์ธ๋ฉ ํฉ๋๋ค.
<div *ngFor="let letterClass of letterClasses">
<div [ngClass]="letterClass">์๋
ํ์ธ์</div>
</div>
component
ํด๋์ค์ ๊ฐ์ ์ ํด ์ค๋๋ค.
export class AppComponent implements OnInit {
letterClasses: any[] = [
{ error: true, important: false, invalid: true },
{ error: false, important: false, invalid: true },
{ error: true, important: false, invalid: false },
{ error: true, important: true, invalid: true },
{ error: false, important: true, invalid: true },
{ error: false, important: false, invalid: false },
];
ngOnInit(): void {}
}
์๋์ ๊ฐ์ด letterClass์ ๊ฐ์ ๋ง๊ฒ css์ ํด๋์ค๊ฐ ์ ์ฉ๋์ด ๋์ค๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
2. NgStyle
์ปดํฌ๋ํธ ์ํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ์ฌ๋ฌ ์ธ๋ผ์ธ ์คํ์ผ์ ๋์์ ์ง์ ํ ์ ์์ต๋๋ค.
component
style๋ค์ ์ํ๋ ๊ฐ์ ๋ง๊ฒ ์์ฑํด ์ค๋๋ค.
export class AppComponent implements OnInit {
letterStyles: any[] = [
{ color: 'red', backgroundColor: 'black', fontSize: '14px' },
{ color: 'orange', backgroundColor: 'gray', fontSize: '16px' },
{ color: 'yellow', backgroundColor: 'purple', fontSize: '18px' },
{ color: 'green', backgroundColor: 'pink', fontSize: '11px' },
{ color: 'blue', backgroundColor: 'teal', fontSize: '20px' },
{ color: 'indigo', backgroundColor: 'white', fontSize: '19px' },
];
ngOnInit(): void {}
}
html
component์ letterStyle์ [ngStyle]๋ก ๋ฐ์ธ๋ฉ ํด์ค๋๋ค.
<div *ngFor="let letterStyle of letterStyles">
<div [ngStyle]="letterStyle">์๋
ํ์ธ์</div>
</div>
์๋์ ๊ฐ์ด style์ด ์ ์ฉ๋์ด ๋์ค๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
3. NgIf
if๋ฌธ๊ณผ ๋์ผํ๊ฒ ์กฐ๊ฑด์ ๊ฑธ์ด ์๋ฆฌ๋จผํธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
component
๋ฒํผ์ ๋๋ฅด๋ฉด ํ์ดํ์ด ๋ฐ๋๋๋ก ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
export class AppComponent implements OnInit {
buttonTitle: string = 'Remove';
ngOnInit(): void {}
click() {
this.buttonTitle = this.buttonTitle == 'Remove' ? 'Add' : 'Remove';
}
}
html
ngIf๋ฅผ ํตํด์ buttonTitle์ ๋ฐ๋ผ์ ์ ๊ฑฐ๋๊ฑฐ๋ ์ถ๊ฐ๋๋๋ก ํฉ๋๋ค.
<h1 *ngIf="buttonTitle == 'Remove'">Hi</h1>
<button [ngStyle]="{ width: '100px', height: '100px' }" (click)="click()">
{{ buttonTitle }}
</button>
Remove์ผ ๋ ๋ฒํผ์ ๋๋ฅด๋ฉด Hi๊ฐ ์ฌ๋ผ์ง๊ณ ,
Add์ผ ๋ ๋ฒํผ์ ๋๋ฅด๋ฉด Hi๊ฐ ๋ค์ ์๊ธฐ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
4. NgFor
๋ฐฐ์ด์ ์๋ ํญ๋ชฉ์ ํ๋ฉด์ ํ์ํ ์ ์์ต๋๋ค.
component
component์ ์ซ์๊ฐ ๋ค์ด ์๋ ๋ฐฐ์ด์ ๋ง๋ค์ด ์ค๋๋ค.
export class AppComponent implements OnInit {
numbers: number[] = [1, 2, 3, 4, 5];
ngOnInit(): void {}
}
html
ngFor์ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ ์ฐจ๋ก๋ก ๋ํ๋๊ฒ ํด์ค๋๋ค.
<div *ngFor="let number of numbers">
<h1>{{ number }}</h1>
</div>
์๋์ ๊ฐ์ด ์ซ์๊ฐ ์ฐจ๋ก๋ก ๋ํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋๊ธ