๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Frontend/Angular

[Angular] Directive๋ž€? (feat. Built-in Directive)

by Fomagran ๐Ÿ’ป 2022. 6. 2.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” 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>

 

์•„๋ž˜์™€ ๊ฐ™์ด ์ˆซ์ž๊ฐ€ ์ฐจ๋ก€๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€