Angular.js: ํ”ผ๋“œ๋ฐฑ ์š”์ฒญ: `angular.component()` - ๊ธฐ๋ณธ ์ง€์‹œ๋ฌธ ์ปจํŠธ๋กค๋Ÿฌ ์ด๋ฆ„

์— ๋งŒ๋“  2016๋…„ 01์›” 02์ผ  ยท  59์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: angular/angular.js

๋ฒ”์œ„์— ์—ฐ๊ฒฐ๋  ๋•Œ ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ง€์‹œ๋ฌธ ์ปจํŠธ๋กค๋Ÿฌ ์ด๋ฆ„์— ๋Œ€ํ•ด ์ผ๊ด€๋œ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/angular/angular.js/issues/10007#issuecomment -166704255 ์ฐธ์กฐ

ํ˜„์žฌ ์šฐ๋ฆฌ๋Š” ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ •์‹ ์ด๋ฆ„์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด์ƒ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค

a) ๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„์€ ํ…œํ”Œ๋ฆฟ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธธ๊ณ  ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
b) ์ปจํ…์ŠคํŠธ ๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ์ธ Angular 2์—์„œ ์‚ฌ์šฉํ•  ํ…œํ”Œ๋ฆฟ์„ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์€ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„์˜ ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1) ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
2) $ ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
3) ์งง์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค(2-4์ž).

๋˜ํ•œ ์ด๋ฆ„์€ ๋ฒ”์œ„์— ์‹ค์ œ๋กœ ๊ฒŒ์‹œ๋˜๋Š” ๋‚ด์šฉ์„ ๋‚˜ํƒ€๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์ „ ์ œ์•ˆ ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • vm - ์ด๊ฒƒ์€ ๋งŽ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฆ„์ด์ง€๋งŒ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ˜๋“œ์‹œ "๋ณด๊ธฐ ๋ชจ๋ธ"์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
  • $comp - ์ด๊ฒƒ์€ ํŒ€์˜ ํ˜„์žฌ ์ œ์•ˆ์ด์ง€๋งŒ ๋น„๊ต์™€ ํ˜ผ๋™๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ๋ ‡๊ฒŒ ์งง์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • $ctrl - ์ž…๋ ฅ ConTROL ์š”์†Œ์™€ ํ˜ผ๋™๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • $this - ์ปจํ…์ŠคํŠธ๊ฐ€ ์—ฌ์ „ํžˆ ์‹ค์ œ๋กœ ๋ฒ”์œ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ…œํ”Œ๋ฆฟ์—์„œ ์‹ค์ œ๋กœ this ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
$compile feedback feature

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋”ฐ๋ผ์„œ ํˆฌํ‘œ๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

$comp  4
$cmp   2
$ctrl  19
$vm    3
$this  3
$ctx   2
$vc    1

๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์€ $ctrl ์ž…๋‹ˆ๋‹ค. ์ธ๊ธฐ๊ฐ€ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด ํ˜ธ์˜ ์ƒ๋‹จ์— ๊ฒŒ์‹œ๋œ ๊ธฐ์ค€์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํŠน๋ณ„ํžˆ ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ๋„์ž…ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์–ธ๊ธ‰๋˜๋Š” ๊ฒƒ์€ Angular ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฏธ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š” ์ปจํŠธ๋กค๋Ÿฌ(๊ตฌ์„ฑ ์š”์†Œ/๋””๋ ‰ํ‹ฐ๋ธŒ ์ปจํŠธ๋กค๋Ÿฌ)์ด๋ฉฐ ์ผ๋ถ€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์‹œ๋ฌธ์—์„œ vm ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์ต์ˆ™ํ•ด์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  59 ๋Œ“๊ธ€

c) ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” isolate:false ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์กฐ์ƒ ์ปจํŠธ๋กค๋Ÿฌ์— ์ง์ ‘ ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ์œ ํ˜น์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

@drpicox - ์ด ๋„์šฐ๋ฏธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“  ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด isolate: false ๋ฅผ ๊ธˆ์ง€ํ•œ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์„ ๊ณ ๋ คํ•œ ํ›„ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

  • isolate: true ์ œํ•œ์ด 'E'์ผ ๋•Œ: ์ €์—๊ฒŒ๋Š” $ctrl ํ‘œ๊ธฐ๋ฒ•์ด ์™„์ „ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ์ง„์ •ํ•œ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค.
  • isolate: false when limits is 'A': ๋‚˜์—๊ฒŒ ๊ทธ๋“ค์€ _decorators_, ๊ธฐ์กด ๊ตฌ์„ฑ ์š”์†Œ์˜ ์ผ์ข…์ธ ์ธํ•ธ์„œ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ $ctrl์ด ์ถฉ๋Œํ•˜๋ฏ€๋กœ ํ˜„์žฌ ๋ช…๋ช…๋ฒ•์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ๊ฐ€ ์ง€์‹œ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. _decorators_๋Š” ๋นˆ๋ฒˆํ•˜์ง€ ์•Š๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ฎ์€ ์ˆ˜์ค€์ด๋ฉฐ ์ฃผ๋‹ˆ์–ด์—๊ฒŒ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ isolate: false ๊ธˆ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ƒ๊ฐ์œผ๋กœ _decorators_์— ๋Œ€ํ•ด ํ˜„์žฌ ์—”ํ„ฐํ‹ฐ์˜ 'E' ๊ตฌ์„ฑ ์š”์†Œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ•จ์ˆ˜๋Š” ํŠนํžˆ ํ˜„์žฌ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ฐ˜ _decorators_๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ฐพ๊ณ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ข…๋ฅ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค).

๋‚˜๋Š” $cmp ์„ ์ข‹์•„ํ•˜์ง€๋งŒ $comp ์ด ๋” ๋ช…ํ™•ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋‚˜์€ ๊ฒƒ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” $cmp ์„ ์ข‹์•„ํ•˜์ง€๋งŒ $comp ์ด ๋” ๋ช…ํ™•ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋‚˜์€ ๊ฒƒ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

$comp ์ข‹์•„์š”. ์ €๋Š” $cmp ๋ฅผ ๋ณผ ๋•Œ๋งˆ๋‹ค "๋น„๊ต"๋ฅผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ œ์•ˆ: ๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„์„ ์ปจํŠธ๋กค๋Ÿฌ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์˜ˆ: ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ -> scope.userProfile

@tabanliviu ํ˜„์žฌ master ์—์„œ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ  ์žˆ์ง€๋งŒ @petebacondarwin ์€ ๋ฐ”๋กœ ์ด ๋ฌธ์ œ์˜ ์ฒซ ๋ฒˆ์งธ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์ผ๋ฐ˜ ์ด๋ฆ„์ด ๋” ๋‚˜์€ ์ด์œ ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

@mgol :+1: ํ‹ฐ์ผ“์„ ์ฝ์„ ๋•Œ ๊ทธ๊ฑธ ๊ฐ„๊ณผํ•œ ๊ฒƒ ๊ฐ™์•„์š”. ์ด ๋ณ€๊ฒฝ์„ ngUpgrade ๋ฌธ์ œ๋กœ ๊ฐ„์ฃผํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? Angular 1.x์˜ ๋งฅ๋ฝ์—์„œ ํ˜„์žฌ ๊ตฌํ˜„์ด ์ข‹์€ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด๊ฒƒ์„ ๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„์„ ์ทจํ•˜๊ณ  ์ปจํŠธ๋กค๋Ÿฌ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋Š” ์„ค์ • ๊ธฐ๋Šฅ์œผ๋กœ ๋…ธ์ถœํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ด๋Ÿฐ ์‹์œผ๋กœ ํ˜„์žฌ ํŒจํ„ด๊ณผ ๋ฏธ๋ž˜์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ž์ „๊ฑฐ ํƒ€๋Š” ์‹œ๊ฐ„.

$ctrl์— ๋Œ€ํ•ด +1.

Ctrl์€ "์ปจํŠธ๋กค๋Ÿฌ" ์ ‘๋ฏธ์‚ฌ๋กœ Angular 1 ๋ฌธ์„œ ๋ฐ ์˜ˆ์ œ์—์„œ ๋งŽ์€ ๊ธฐ์กด ๋ฌธํ™”๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ์ธก์ •์„ ์œ„ํ•ด ์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰ "๊ฐ๋„ Ctrl"์„ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.

๊ตฌ์„ฑ ์š”์†Œ ์ด๋ฆ„์—์„œ ํŒŒ์ƒ์‹œํ‚ค๋Š” ํ˜„์žฌ ์„ ํƒ์€ ์‹ค์ œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‹ค์ œ๋กœ ๊ฝค ๊ธธ์–ด์ง€๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋‹นํžˆ ๋ถˆ์พŒํ•ฉ๋‹ˆ๋‹ค.

:+1: $ctrl ์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ $vm ๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

$ctrl ์— ๋Œ€ํ•ด +1

์šฐ๋ฆฌ๋Š” ng-forward ํŒ€์—์„œ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ฝค ๋งŽ์ด ๋…ผ์˜ํ–ˆ๊ณ  ctrl ๊ฐ€ vm ๋ณด๋‹ค ๋œ ๋กœ๋“œ๋œ ์šฉ์–ด๋ผ๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” $ctrl ์— ํˆฌํ‘œํ•˜๊ณ  ์ด๊ฒƒ์ด ppl์ด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ vm ๋” ์ด์ƒ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋„๋ก ๊ถŒ์žฅํ•œ๋‹ค๋ฉด ๋งค์šฐ ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค :P

์•„ ๋‚˜๋„ ์ถ”๊ฐ€ํ•˜๊ณ ์‹ถ๋‹ค

์ด๊ฒƒ์€ ์ž…๋ ฅ ConTROL ์š”์†Œ์™€ ํ˜ผ๋™๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ. ์„ค๋งˆ.

$ctrl

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๊ฐ€์žฅ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ง๊ด€์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

+1 $ctrl

๊ธฐํƒ€ ์ œ์•ˆ:

  1. $as - ์ปจํŠธ๋กค๋Ÿฌ์ฒ˜๋Ÿผ
  2. $at - like @ - ์ปคํ”ผ ์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” 'this' ์ปจํ…์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
  3. $class - 5์ž์ง€๋งŒ ng2 ์ปดํฌ๋„ŒํŠธ ํด๋ž˜์Šค ํ‘œ๊ธฐ๋ฒ•์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.
  4. $prox - ๊ฐœ๋…์ ์œผ๋กœ Ctrl ์ธ์Šคํ„ด์Šค๋Š” ์„œ๋น„์Šค ๊ณ„์ธต์— ๋Œ€ํ•œ ํ”„๋ก์‹œ์ด๊ธฐ ๋•Œ๋ฌธ์—
  5. $ctx - ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•œ ๋ฐ”๋กœ ๊ฐ€๊ธฐ
    ๊ฐ์‚ฌ ํ•ด์š”.

$this ์— ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ng2์—์„œ ์ปจํŠธ๋กค๋Ÿฌ์˜ this ๊ฐ€ ํ…œํ”Œ๋ฆฟ์˜ ์ปจํ…์ŠคํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(๋‚ด ์ƒ๊ฐ์— component ๋Š” ng1๊ณผ ng2 ์‚ฌ์ด์˜ ์ „ํ™˜ ๋„๊ตฌ ์—ญํ• ์— ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค).

$ctrl์— ๋Œ€ํ•ด +1

๋˜ํ•œ ๊ตฌ์„ฑ ์š”์†Œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ๋•Œ๋ฌธ์— $ctrl ์†์„ฑ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

$ctrl์— ๋Œ€ํ•ด +1

$this์— +1

๋‚˜๋Š” this ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  $ ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ๋งŽ์€ ํ•ดํ‚น์ด ์•„๋‹ˆ๋ผ๋ฉด ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒƒ์˜ ์ค„์ž„๋ง์ด ์•„๋‹Œ ์œ ์ผํ•œ ์˜ต์…˜์ด๊ธฐ๋„ ํ•˜๊ณ  ์•ฝ์–ด๋ฅผ ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค. :)

$ctrl ๋˜๋Š” $cc(๊ตฌ์„ฑ ์š”์†Œ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์•ฝ์ž)๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

$ctrl์— ๋Œ€ํ•ด +1

$troll ๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. $this $controller ์˜ ์ ˆ๋ฐ˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”, ๋†๋‹ด์ž…๋‹ˆ๋‹ค. ์ €๋Š” $ctrl ๋กœ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. :+1:

$ctrl + 1

$vm

์žฅ์ 

  • ๋œ ์ƒˆ๋กœ์šด ๊ฐœ๋…
  • ์งง์€
  • ๊ฐ์ฒด๊ฐ€ ์‹ค์ œ๋กœ ๋ฌด์—‡์ธ์ง€ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ์ „ํ™˜ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค... ๊ทธ๊ฒŒ ์š”์ ์ž…๋‹ˆ๋‹ค)

๋‹จ์ 

  • ๊ฐ์ฒด๊ฐ€ ์‹ค์ œ๋กœ ๋ฌด์—‡์ธ์ง€ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ์ „ํ™˜ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค... ๊ทธ๊ฒŒ ์š”์ ์ž…๋‹ˆ๋‹ค)

$ctx - ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•œ ๋ฐ”๋กœ ๊ฐ€๊ธฐ์ž…๋‹ˆ๋‹ค.

$ctrl ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ด๊ณ  $vm ๋ณด๋‹ค ๋œ ์ต๋ช… , $comp ๋˜๋Š” $this ์ฒ˜๋Ÿผ ํ˜ผ๋™๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ ์—”์ง„(Jade, Handlebars, Mustache.js, Dust.js, Nunjucks, EJS ๋“ฑ)์„ ์‚ดํŽด๋ณด์•˜๋Š”๋ฐ ์ด๋ฆ„์ด context , locals ๋˜๋Š” data ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ $ctx ์ปจํ…์ŠคํŠธ์˜ ๊ฒฝ์šฐ $ctrl (๋˜๋Š” $this )์™€ ๋™์ผํ•œ ์ธ์ง€ ๊ณผ๋ถ€ํ•˜๊ฐ€ ์—†์œผ๋ฉฐ ์‹ค์ œ๋กœ in Angular 2, where the context is the controller ๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

@albertosantini - $ctx ์˜ ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๋Š” ์‹ค์ œ ์ปจํ…์ŠคํŠธ๊ฐ€ ํ˜„์žฌ ๋ฒ”์œ„์ด๋ฉฐ this ์—์„œ๋„ ์ง์ ‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$vc - View Controller๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
Apple ๋ฌธ์„œ ์—์„œ ์ฐธ์กฐ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

tldr;

"...UIViewController ํด๋ž˜์Šค๋Š” ๋ณด๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์„œ๋“œ์™€ ์†์„ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค... "

๋‚˜๋Š” $this ์— ๊ฐ•๋ ฅํ•˜๊ฒŒ ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค.

<textarea ng-change="$this.handleChange">

_์žฅ์ :_

  • ๊ฐ€์žฅ ํฐ ์žฅ์  : ์ปจํŠธ๋กค๋Ÿฌ ๋‚ด๋ถ€ ctrl = this ๋ฅผ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์–ด ๋‘ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋™์ผํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค.
  • $this ์ด์™ธ์˜ ๋ชจ๋“  ๊ฒƒ์€ Angular๊ฐ€ Angular ์— ๋Œ€ํ•œ ์ธ๊ธฐ ์žˆ๋Š” ๋ถˆ๋งŒ ์ค‘ ํ•˜๋‚˜ ์ธ _"๋” ๋งŽ์€ ๋…์  ์–ธ์–ด"_๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜ค์—ผ๋ฉ๋‹ˆ๋‹ค.
  controller: function() {
    var ctrl = this;

    ctrl.items = [];
    ctrl.text = '';
    ctrl.handleSubmit = function () {
        ctrl.items.push({text: ctrl.text});
        ctrl.text = '';
    };
  }

๋” ๊นจ๋—ํ•˜๊ณ  ์šฐ์•„ํ•˜๋ฉฐ ํ”„๋ ˆ์ž„์›Œํฌ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ๋Œ€์‹ 

  controller: function() {
    this.items = [];
    this.text = '';
    this.handleSubmit = function () {
       this.items.push({text: this.text});
       this.text = '';
    };
  • ํ›„์ž๋Š” Angular๊ฐ€ ์žˆ๋“  ์—†๋“  ์–ด๋””์—์„œ๋‚˜ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆœ์ˆ˜ํ•œ JavaScript ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ „์ž๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ๋งฅ๋ฝ์—์„œ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ตฌ๋ฌธ ํ˜•๊ด‘ํŽœ์ด ํ›„์ž์˜ ์Šค๋‹ˆํŽซ์—์„œ ์–ผ๋งˆ๋‚˜ ๋‹น์‹ ์˜ ์นœ๊ตฌ์ด๊ณ  ์ „์ž์—์„œ ๊ทธ๊ฒƒ์ด ๋‹น์‹ ๊ณผ ์–ด๋–ป๊ฒŒ ๋งž์„œ๊ณ  ์žˆ๋Š”์ง€ ์ฃผ๋ชฉํ•˜์‹ญ์‹œ์˜ค. ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์€ ์ค‘์š”ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
  • ์ด ๊ตฌ๋ฌธ์€ ๋ฐฉ๋ฌธ ํŽ˜์ด์ง€์— ๋‚˜ํƒ€๋‚˜๋Š” React์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
<textarea onChange={this.handleChange}>
  • React์—์„œ DOM ์ปจํ…์ŠคํŠธ์™€ Controller ์ธ์Šคํ„ด์Šค๋Š” ์ •ํ™•ํžˆ ๋™์ผํ•œ ๊ฐœ์ฒด ๋กœ ์ทจ๊ธ‰๋˜๋ฉฐ React๋Š” ์‹ฌ์ง€์–ด ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋” ๊ฐ„๋‹จํ•˜๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค.
  • Angular๋Š” ํ™•์‹คํžˆ React๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋‘ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ณด๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์œ ์‚ฌ์„ฑ์ด ๋†’์„์ˆ˜๋ก ๋” ์นœ๊ทผํ•˜๊ฒŒ ๋Š๊ปด์ง€๊ณ  ๋œ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ๋Š๊ปด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@dmitriz AngularJS์—์„œ $this ์˜ ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๋Š” ํ…œํ”Œ๋ฆฟ์—์„œ ์ปจํ…์ŠคํŠธ(์˜ˆ: this )๊ฐ€ ์‹ค์ œ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. React (๋ฐ Angular 2)์—์„œ๋Š” ์‹ค์ œ๋กœ ๋™์ผํ•œ ๊ฒƒ์ด๋ฏ€๋กœ this (๋˜๋Š” $this )๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. Angular 1์—์„œ๋Š” ๋™์ผํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ $this ๋Š” ์‹ค์ œ๋กœ ๋” ๋งŽ์€ ํ˜ผ๋ž€์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JavaScript ์ธก๋ฉด๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋ฌด๋ฃŒ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ this ์˜ ๋ฐ”์ธ๋”ฉ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ES5 ์ฝ”๋“œ์—์„œ this ์˜ ๋ณ„์นญ์„ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์—ฌ์ „ํžˆ var that = this ์™€ ๊ฐ™์€ ๊ฒƒ์„ ๊ฐ–๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ var ctrl = this ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐœ์ฒด์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ this ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์™„์ „ํžˆ ํ•ฉ๋ฆฌ์ ์ธ IMO์ด์ง€๋งŒ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๊ฐœ์ฒด๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

@dmitriz , ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ์—์„œ ๋™์ผํ•œ ๋ณ„์นญ์„ ๊ฐ€์งˆ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค(๋‚˜๋Š” ์ ˆ๋Œ€ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค). ๋˜ํ•œ ์ฝœ๋ฐฑ ๋“ฑ์— ๋Œ€ํ•ด .bind(this) ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํ•ญ์ƒ var self = this ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ด๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€๋˜์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์˜ต์…˜์— ๊ด€ํ•˜์—ฌ:

  • $ctx : ๋‚˜๋Š” ์ด๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์™œ๋ƒํ•˜๋ฉด ( @petebacondarwin ์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด) ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ‘œํ˜„์‹์˜ ์ปจํ…์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • $this : (Angular ์‹์—์„œ) this ๋Š” ํ˜„์žฌ ๋ฒ”์œ„์— ๋Œ€ํ•œ ํŠน์ˆ˜ ๋ณ„์นญ์ด๋ฏ€๋กœ this --> scope ๋ฐ $this --> controller ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ €๋Š” ์ด๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”์šฑ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๊ทธ๋ ‡์ง€ ์•Š์•˜๋‹ค๋ฉด ์ข‹์•˜์„ ํ…๋ฐ.)
  • $vm : ๋‚˜๋Š” ์ด๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์ง€๋งŒ(์ด๋ฏธ ์–ธ๊ธ‰ํ•œ ์ด์œ ๋กœ), ์šฐ๋ฆฌ์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋” ์ž˜ ์ถฉ์กฑ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์—†๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • $cmp : ๋งค์šฐ ๋งŒ์กฑ์Šค๋Ÿฝ์ง€๋Š” ์•Š์ง€๋งŒ(100% ์ •ํ™•ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—) ์ถฉ๋ถ„ํžˆ ์„ ์–ธ์ ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์ œ์•ฝ์„ ๋” ์ž˜ ์ถฉ์กฑ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์—†๋‹ค๋ฉด ํ•จ๊ป˜ ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • $comp : ๋” ์งง๊ธฐ ๋•Œ๋ฌธ์— $cmp ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค( $comp compare ์™€ ๋” ์ด์ƒ "ํ˜ผ๋™ํ•  ์ˆ˜ ์žˆ๋Š”" ๊ฒƒ์„ ์ฐพ์ง€ ๋ชปํ•จ).
  • $ctrl : ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ฝค ์ข‹์•„ํ•œ๋‹ค. ๋งค์šฐ ์งง๊ณ  ์„ ์–ธ์ ์ด๋ฉฐ ์ตœ๋Œ€ํ•œ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•ญ์ƒ ๋‚ด ์ปจํŠธ๋กค๋Ÿฌ์— ctrl ์ ‘๋ฏธ์‚ฌ๋ฅผ ๋ถ™์˜€์œผ๋ฉฐ ConTRoL ์™€ ํ˜ผ๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ๋” ์ง€์‹์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์€ ํ˜ผ๋™์ด ์žˆ์—ˆ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค :)). ์šฐ๋ฆฌ๊ฐ€ ํ˜ผ๋ž€์ด ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ๊ฒฐ์ •ํ•œ๋‹ค๋ฉด, ๋‚˜๋Š” ํ™•์‹คํžˆ ์ด๊ฒƒ์œผ๋กœ ๊ฐˆ ๊ฒƒ์ด์ง€๋งŒ, ๋‚˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ์„ ํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
  • $troll : ์ข€ ๋” ์ƒ๊ฐํ•ด ๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์ž ์žฌ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.stuck_out_tongue:
  • ๊ธฐํƒ€ ์˜ต์…˜( $as , $at , $cc , $prox , $vc ): ์ €๋Š” ๊ทธ๋“ค์ด ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ๋„์ž…ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋” ๋งŽ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋„์›€๋ณด๋‹ค ํ˜ผ๋ž€.

๋‚˜๋Š” $ctrl ์— ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฒƒ์ด ์ง€์‹œ๋ฌธ ์ปจํŠธ๋กค๋Ÿฌ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ.

๋‹ค๋ฅธ ๊ฒƒ๋“ค์— ๋Œ€ํ•˜์—ฌ:

  • $vm -- ์ด๋ฏธ ์ง€์ ํ–ˆ๋“ฏ์ด ํ•„์ˆ˜ ์‚ฌ์šฉ ์˜๋„๊ฐ€ ์•„๋‹˜ => ํŒจํ„ด/์ฝ”๋“œ ์ฝ๊ธฐ์˜ ํ˜ผ๋ž€ ๋˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์„ ํƒ ๊ฐ์†Œ(vm์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ)
  • $cmp -- ๊ธ€์Ž„์š”, ์ปดํฌ๋„ŒํŠธ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์ปจํŠธ๋กค๋Ÿฌ(๋‹จ)์ธ๊ฐ€์š”? ๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
  • $this -- ๋˜ํ•œ โ€‹โ€‹์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฒ”์œ„์—์„œ "์ด๊ฒƒ"์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์˜๋ฏธ๋ก ์ ์œผ๋กœ, ๋‚˜๋Š” ์ด๊ฒƒ์ด.. ๊ธ€์Ž„.. ์ดํ•ด๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • $ctx -- ์‹ค์ œ๋กœ๋Š” $this ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ Pascal์ด ์ด๋ฏธ ๋งํ–ˆ๋“ฏ์ด ์ œ์–ด ์š”์†Œ์™€ ํ˜ผ๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Angular2๊ฐ€ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋“  DOM/์ž…๋ ฅ ์š”์†Œ(์˜ˆ: $ctrl, $val, $cmbx ๋“ฑ)๋ฅผ ์ฃผ์ž…ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ด๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

+1 $ctrl

์ด์ „ ์ฃผ์„๊ณผ ๊ฐ™์€ ์ค„์—์„œ:

  • $vm , $as , $at , $cc , $prox , $vc , $ctx ,. ..: ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ๋ถˆํ•„์š”ํ•œ ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
  • $this : this ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ํ˜ผ๋ž€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • $cmp or $comp : (๋จผ์ € ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•) ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ตฌ์„ฑ ์š”์†Œ ๋ชจ๋ธ์— ์ง‘์ค‘ํ•˜๋„๋ก ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • $ctrl : ์Šค์ฝ”ํ”„, ์ปจํŠธ๋กค๋Ÿฌ์— ๊ฒŒ์‹œ๋˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

this = $scope ๋ฅผ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ๋ช…ํ™•ํžˆ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฑด ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด $ctrl ๋Š” $troll ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ฐจ์„ ์ฑ…์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. :)

$ctrl ์— ๋Œ€ํ•œ +1 : ๊ฐ€์žฅ ์ง๊ด€์ ์ด๊ณ  ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

@petebacondarwin ์ž์„ธํ•œ ๋‚ด์šฉ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ $ctrl ์— ๋Œ€ํ•ด +1 ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ด๋ฆ„์œผ๋กœ ์„ ์–ธ์  $ctrl ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์™œ ์ข‹์ง€?

@ssssssssssss @ssssssssd

VM์ด ์ข‹์€ ํ‘œํ˜„์ด ์•„๋‹Œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

(์ด๋ฏธ ๋‹ค๋ฅธ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•œ ๊ฒฝ์šฐ ๊ฐ€๋Šฅํ•˜๋ฉด ๋งํฌํ•˜์„ธ์š”.)

AFAIK ๋•Œ๋ฌธ์— Angular์˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” MVC์˜ ํด๋ž˜์‹ ์ปจํŠธ๋กค๋Ÿฌ๋ณด๋‹ค ๋ทฐ ๋ชจ๋ธ์— ๋” ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ๋Š”์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

$vm์— +1

@QuinntyneBrown ์˜ ์š”์ ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋” ์งง๋‹ค.

ํ•˜์ง€๋งŒ ๋” ์ค‘์š”ํ•œ -

@johnpapa ์˜ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋Š” ๋งค์šฐ ์ธ๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋‚ด๊ฐ€ ์•„๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์€ ์ด๋ฅผ "์‹ ๊ทœ ๊ฐœ๋ฐœ์ž" ๊ต์œก ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ๋ถ€๋กœ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๋ณ€๊ฒฝํ•˜๋ฉด ์ƒˆ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฏธ์น  ์˜ํ–ฅ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์Šคํƒ€์ผ ๊ฐ€์ด๋“œ์— PR ์ œ์ถœ).

๊ทธ๋ž˜์„œ ์ €๋Š” ๋” ์งง์€ "$vm" ์ด๋ฆ„์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค(BTW, ์™œ $ ๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? :)

(BTW, ์™œ $๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? :)

Angular ์ •์˜ ์ด๋ฆ„์€ ์ด๋ฆ„ ๊ณต๊ฐ„์„ ํ”„๋กœ๊ทธ๋ž˜๋จธ ์ •์˜์™€ ๊ณต์œ ํ•  ๋•Œ $ ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ Angular์— ์˜ํ•ด ์ •์˜๋˜๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž์ฒด ์ •์˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„ ๋‚ด์—์„œ ์ •์˜๋ฉ๋‹ˆ๋‹ค. $ ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฆ„ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ  Angular๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๋Œ€๋กœ ์ผ๊ด€๋˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

(@johnpapa) ์ด ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ์˜ ๋ชฉ์ ์€ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ทœ์น™๊ณผ ๋” ์ค‘์š”ํ•˜๊ฒŒ๋Š” ๋‚ด๊ฐ€ ์„ ํƒํ•˜๋Š” ์ด์œ ๋ฅผ ๋ณด์—ฌ์คŒ์œผ๋กœ์จ Angular ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์— ๋Œ€ํ•œ ์ง€์นจ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์Šคํƒ€์ผ Y032 controllerAs ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ด๋ฅผ ์œ„ํ•ด ์บก์ฒ˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ViewModel์„ ๋‚˜ํƒ€๋‚ด๋Š” vm๊ณผ ๊ฐ™์€ ์ผ๊ด€๋œ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.

๋”ฐ๋ผ์„œ vm , ctrl ๋˜๋Š” troll ์ด๋“  ์ƒ๊ด€์—†์ด ์ผ๊ด€๋œ ๋ณ€์ˆ˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ์•ž์—์„œ ์ง€์ ํ–ˆ๋“ฏ์ด ์•„์ด๋””์–ด๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. vm ๋Š” ViewModel ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. View Models๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ดํ•ดํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. vm ๋˜๋Š” ViewModel ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์ด๋ฆ„์˜ ํŒฌ์ด ์•„๋‹™๋‹ˆ๋‹ค. ctrl ์ด ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ์ธ๊ฐ€์š”? ์ œ์–ด(html ์ œ์–ด์™€ ๊ฐ™์€)? ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์ €๋Š” vm ๋˜๋Š” comp ์— ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค. vm ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ์„ค๋ช…ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. comp ๋Š” ์ƒˆ๋กญ์ง€๋งŒ ์‹ ์„ฑ์‹œํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

$ctrl ๋ณด๋‹ค๋Š” $ctlr (์ฆ‰, ConTroLleR)๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

+1 $ ๋ณด์ƒ

@petebacondarwin ์˜ค, ์ด๊ฒƒ์— ๊ด€ํ•œ ๋ฌธ์ œ๋กœ ์šฐ๋ฆฌ๋ฅผ ํญ๊ฒฉํ•  (๋‚˜ ๊ฐ™์€) ๋‚œ๋…์ฆ ํ™˜์ž๋“ค... :)

@drpicox ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์š”์ ์ด ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ํž˜๋“  ์ผ์ด์ง€๋งŒ ์ ์–ด๋„ ์ œ ๊ฒฝํ—˜์— ๋น„์ถ”์–ด ๋ณผ ๋•Œ ์ €๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ "vm" ๊ทœ์น™์„ ๊ฐ€๋ฅด์น˜๋Š” ๋ฐ ์–ด๋ ค์›€์ด ์—†์—ˆ๊ณ  ๋ช‡๋ช‡ ํšŒ์‚ฌ๊ฐ€ ๋Œ€๊ทœ๋ชจ ์•ฑ์„ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์–ด ๊ฝค ๋นจ๋ฆฌ ์–ป์—ˆ์ง€๋งŒ ์•„๋งˆ๋„ ์ €๋Š” m ์ด ๊ฒฝํ—˜์—์„œ ํ˜ผ์ž.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‹น์‹ ์˜ ์š”์ ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. $์— ๋™์˜

๋‚˜๋Š” ์—ฌ์ „ํžˆ $vm์„ ์ง€์ง€ํ•˜์ง€๋งŒ $comp๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค...

Angular UI Bootstrap ํŒ€์˜ @wesleycho ๋Š” vm ์— ๋Œ€ํ•ด ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://github.com/angular/angular.js/issues/10007#issuecomment -166707284

$ctrl ์— +1

@shairez ์ปจ๋ฒค์…˜ ๊ฐœ์ตœ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ์™„์ „ํžˆ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ˆ˜์‹ญ ๊ฐœ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•œ ํ”„๋ฆฌ๋žœ์Šค ๊ฑด์ถ•๊ฐ€์ด๋ฉฐ vm ์ปจ๋ฒค์…˜์ด ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์„ ๊ฑฐ๋ถ€ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด ๊ทœ์น™์ด Angular ์ž์ฒด์—์„œ ๋‚˜์˜จ ๊ฒƒ์ด๋ผ๋ฉด ์ €ํ•ญ์ด ๋” ๋‚ฎ์•„์•ผ ํ•˜์ง€๋งŒ ์ด๋ฆ„์ด $ctrl ์ด๋ฉด ์ €ํ•ญ ์—†์ด ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋ฐ›์•„๋“ค์ผ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. $ctrl ์€(๋Š”) ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํˆฌํ‘œ๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

$comp  4
$cmp   2
$ctrl  19
$vm    3
$this  3
$ctx   2
$vc    1

๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์€ $ctrl ์ž…๋‹ˆ๋‹ค. ์ธ๊ธฐ๊ฐ€ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด ํ˜ธ์˜ ์ƒ๋‹จ์— ๊ฒŒ์‹œ๋œ ๊ธฐ์ค€์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํŠน๋ณ„ํžˆ ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ๋„์ž…ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์–ธ๊ธ‰๋˜๋Š” ๊ฒƒ์€ Angular ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฏธ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š” ์ปจํŠธ๋กค๋Ÿฌ(๊ตฌ์„ฑ ์š”์†Œ/๋””๋ ‰ํ‹ฐ๋ธŒ ์ปจํŠธ๋กค๋Ÿฌ)์ด๋ฉฐ ์ผ๋ถ€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์‹œ๋ฌธ์—์„œ vm ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์ต์ˆ™ํ•ด์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค, $ctrl์ž…๋‹ˆ๋‹ค!

1.4 ์ดํ•˜์˜ ๋ฌธ์ œ - $ctrl ๋กœ '์ด๋ฆ„'์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ œ๊ฐ€ ์ œ๊ธฐํ•˜๊ณ  ์‹ถ์€ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” Angular 1.4 ์ดํ•˜์—์„œ๋Š” $ ๊ธฐํ˜ธ๋กœ ์‹œ์ž‘ํ•˜๋Š” "as name"์„ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
Error: [$controller:ctrlfmt] Badly formed controller string

์ผ๋ถ€ ํšŒ์‚ฌ๋Š” ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ช‡ ๊ฐœ์›”์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ด€๋ก€๋ฅผ ๋”ฐ๋ฅด๊ธฐ๋ฅผ ์›ํ•˜๋ฏ€๋กœ ํ–ฅํ›„ ์—…๊ทธ๋ ˆ์ด๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋” ๊ฐ„๋‹จํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

vm ์—์„œ $ctrl ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•ด? ์–ด๋–ค ์ œ์•ˆ?

๋‹จ๊ณ„์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
vm ์—์„œ ctrl ๋กœ ๋ณ€ํ™˜ ์‹œ์ž‘
1.5๊ฐ€ ๋ฆด๋ฆฌ์Šค๋˜๋ฉด ctrl ๋ฅผ $ctrl ๋กœ "์—…๊ทธ๋ ˆ์ด๋“œ"ํ•ฉ๋‹ˆ๋‹ค.

์žฅํ™ฉํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์€ angular.version ๋ฅผ ํ™•์ธํ•˜์—ฌ ๋Ÿฐํƒ€์ž„์— controllerAs ๋ณ„์นญ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ:

 angular
        .module('github')
        .directive('issueThread', issueThread);

    /* <strong i="14">@ngInject</strong> */
    function issueThread () {
        // this can be required as a module if using some module loader
        // or - another way is using global on angular namespace (i know it a bad practice - hwoever just to indicate reuse of this check 
        let prefix = angular.version.minor === 5 ? '$' : '';
        let controllerAs = prefix + 'ctrl';
        // with template strings
        var controllerAs = `${prefix}ctrl`;

        var directive = {
            controller: controller,
            restrict: 'E'
        };
        return directive;

        function controller() {
        }
    }

@orizens ํ…œํ”Œ๋ฆฟ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@shairez ์Œ, ์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. $ ๊ธฐํ˜ธ๋Š” ๊ฐ๋„ ๋‚ด๋ถ€์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค... ๋‹ค์Œ ๋งˆ์ด๋„ˆ์—์„œ ์ผ์ข…์˜ ์ˆœ๋ฐฉํ–ฅ ํ˜ธํ™˜์„ฑ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@drpicox ๋‹น์‹ ์€ ๊ฑฐ๊ธฐ์—์„œ ์š”์ ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค :).
๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ (ํ•ดํ‚ค ํ•˜๋‚˜ ...) ์ƒ๊ฐํ•  ์ˆ˜์žˆ๋Š” ํ•œ ๊ฐ€์ง€ ์†”๋ฃจ์…˜์€ ๋Ÿฐํƒ€์ž„ / ๋นŒ๋“œ์˜ ํ…œํ”Œ๋ฆฟ์—์„œ ctrl์„ $ ctrl๋กœ "๊ต์ฒด"ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ es6 ๋ฐ ๋ชจ๋“ˆ๋กœ ๊ตฌ์ถ•๋œ ๊ฒฝ์šฐ ์‰ฝ๊ฒŒ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋นŒ๋“œ ์‹œ gulp/grunt/npm์— ๋Œ€ํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ controllerAs ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์ด์ƒ์ ์ธ ์†”๋ฃจ์…˜์€ ์•„๋‹™๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ ์ปจํŠธ๋กค๋Ÿฌ ๋ฌธ์ž์—ด(์žˆ๋Š” ๊ฒฝ์šฐ)์—์„œ ์‹๋ณ„์ž๋ฅผ ์ถ”์ถœํ•˜๋Š” RegExp๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ controllerAs ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์—ญ๋ฐฉํ–ฅ ๋ฐ ์ˆœ๋ฐฉํ–ฅ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. :)

(๋ˆ„๊ตฐ๊ฐ€ RegExp๋ฅผ ์ถ”์ถœํ•˜๋Š” ํ•ด๋‹น ์‹๋ณ„์ž๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๊ธฐํšŒ๋ฅผ ๊ฐ–๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐ”๋กœ ๊ฑฐ๊ธฐ ์— ์žˆ์Šต๋‹ˆ๋‹ค.)

@gkalpak ์ข‹์€ ์ง€์ ์ž…๋‹ˆ๋‹ค. controllerAs ์†์„ฑ์˜ ์‚ฌ์šฉ์„ ์ด‰์ง„ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์ ์ž…๋‹ˆ๋‹ค. ์ ์  ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด 1.4 ์ดํ•˜ ๋ฒ„์ „์—์„œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ $ctrl ์— ๋Œ€ํ•ด ๊ฐ€๋ฅด์น˜๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ๊ณ  ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ˆœ๋ฐฉํ–ฅ ํ˜ธํ™˜์„ฑ(๋ฐฉ๋ฒ•์€ ํ™•์‹คํ•˜์ง€ ์•Š์Œ)์€ ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค!

@shairez ์ด ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

<ctrl> as <identifier> ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‹๋ณ„์ž์— $ ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” #13736์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
์—ฌ์ „ํžˆ ํ—ˆ์šฉ๋˜๋Š” ์‹๋ณ„์ž๋Š” controller: '... as ...' ๋Œ€ controllerAs: '...' ๊ฐ„์— ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ฆ‰, controller: '... as $ctrl' ๋ฅผ ํ™๋ณดํ•˜๋Š” ๊ฒƒ์ด ๊ด€์Šต์„ ๋”ฐ๋ผ๊ฐ€๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ธ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. controller: '...', controllerAs: '$ctrl' controller: '... as $ctrl' ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

@gkalpak ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ ๋Œ€์‹  controllerAs ์†์„ฑ์„ ๊ตฌ๋ฌธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์žฅํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€๋Š” ๊ตฌ์„ฑ ์š”์†Œ ๋ฌธ์„œ์— "๊ตฌ์„ฑ ์š”์†Œ ์ •์˜๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋ฉฐ ์ผ๋ฐ˜ ์ง€์‹œ๋ฌธ์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์žˆ์–ด ๋งŽ์€ ๋ณต์žก์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ ๋‹ค๋ฅธ ํ•˜๋‚˜: ์ง€์‹œ์–ด์˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์„œ๋กœ ํ†ต์‹ ํ•˜๋Š” ๋ณต์žกํ•œ ์ง€์‹œ๋ฌธ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋งํฌ ๊ธฐ๋Šฅ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: "API๋ฅผ ๋‹ค๋ฅธ ์ง€์‹œ๋ฌธ์— ๋…ธ์ถœํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค"๋ผ๋Š” ๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ ์ง€์‹œ๋ฌธ๊ณผ ๋‚ด ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด ์ปจํŠธ๋กค๋Ÿฌ ๋Œ€์‹  ๋งํฌ๋กœ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ์ง€์‹œ๋ฌธ์€ ์ˆ˜๋ฐฑ ๋ฒˆ ์‚ฌ์šฉ๋จ) ng-repeat์—์„œ๋Š” ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ...
๋‚˜๋Š” Component("simple" ์ง€์‹œ์–ด)์—์„œ "simple"(๋งํฌ ๊ธฐ๋Šฅ)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ์•Š๊ณ  ๋ฌด๊ฑฐ์šด ๊ฒƒ(์ปจํŠธ๋กค๋Ÿฌ)๋งŒ ์ฐพ์Šต๋‹ˆ๋‹ค.
๋ญ”๊ฐ€ ๊ทธ๋ฆฌ์›Œ?
์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@frfancha - ์„ฑ๋Šฅ ํ–ฅ์ƒ์€ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ธฐ ์œ„ํ•ด $injector ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋งž์ฃ ? ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์„ฑ๋Šฅ ์ธก์ •์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ตฌ์„ฑ ์š”์†Œ ๋„์šฐ๋ฏธ์˜ ์•„์ด๋””์–ด๋Š” ๊ตฌ์„ฑ ์š”์†Œ ์œ ํ˜•(๋ถ„๋ฆฌ, ์š”์†Œ) ์ง€์‹œ๋ฌธ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ (LOC ์˜๋ฏธ์—์„œ) ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Angular 2์—์„œ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๋Š” ๋ฐฉ์‹๊ณผ ๋” ์ธ๋ผ์ธ์ธ ์ฝ”๋“œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ์•ฑ์— ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ directive ๋„์šฐ๋ฏธ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ ์š”์†Œ ์ง€์‹œ๋ฌธ์„ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด component() ๋„์šฐ๋ฏธ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ API ๋ฌธ์„œ ๋ฐ ๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ๋ฅผ ์‚ดํŽด๋ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@petebacondarwin ์ฒ˜์Œ์— ์šฐ๋ฆฌ๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋ชจ๋“  ์ง€์‹œ๋ฌธ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋”ฐ๋ž๋˜ ์ฒซ ๋ฒˆ์งธ ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์ด๋Ÿฐ ์‹์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
1000๊ฐœ์˜ ์ง€์‹œ๋ฌธ(ng-repeat x 200์˜ "ํ–‰"์œผ๋กœ 5๊ฐœ)์ด ์žˆ๋Š” ํŠน์ • ํŽ˜์ด์ง€๋ฅผ "์—ด๊ธฐ"์— ์•ฝ 15์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋œ ํ›„์—์•ผ ์ง€์‹œ๋ฌธ์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ์ฝ๊ณ  " (๋‹ค๋ฅธ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์š”๊ตฌํ•จ์œผ๋กœ์จ) ์ง€์‹œ ์‚ฌ์ด์— "๋งํ•˜๊ธฐ". ์ปจํŠธ๋กค๋Ÿฌ ๋Œ€์‹  ๋งํฌ ๊ธฐ๋Šฅ์œผ๋กœ ๋ชจ๋‘ "๋‹ค์‹œ ์ž‘์„ฑ"ํ•œ ํ›„(๋‹ค์‹œ ์“ฐ๊ธฐ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๋Œ€์‹  ๋งํฌ์˜ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ๋งŒ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํฐ ๋‹จ์–ด์ž„) ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ 8์ดˆ์˜€์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ํŒŒ์ด์–ดํญ์Šค ์กฐ์น˜๋ผ๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. ๋‹น์‹œ ์šฐ๋ฆฌ๋Š” Chrome์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  Chrome์—์„œ์˜ ์‹œ๊ฐ„์€ Firefox์˜ ์„ธ ๋ฒˆ์งธ๋กœ ์ถ”์ •๋ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์€ ๋„ค ๋ฒˆ์งธ(๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์—†์ด ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. Firefox์—์„œ ์šฐ๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ "์˜คํ›„์—๋Š” ๋Š๋ฆผ)"๋กœ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Angular์— ๋งค์šฐ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค(Smalltalk Windows ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ WEB API + angular๋กœ ๋ณ€ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ด€์‹ฌ์ด ์žˆ์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ? ์ €๋Š” ๋•Œ๋•Œ๋กœ ๋Ÿฐ๋˜์— ์žˆ์Šต๋‹ˆ๋‹ค).
๊ทธ๋Ÿฌ๋‚˜ ์ง€์‹œ๋ฌธ์„ ์ˆ˜ํ–‰ํ•˜๋Š” "๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•"์„ ์ง€์›ํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์˜ ์„ ํƒ์— ๋†€๋ž์Šต๋‹ˆ๋‹ค.

@gkalpak ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@petebacondarwin ๋ณ„๋„์˜ ๋ฌธ์ œ๋Š” ๋” ์ด์ƒ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๊นŒ? (ํ™๋ณด ๋•Œ๋ฌธ์—)

๋‚˜๋Š” (๋‚ด๊ฐ€ ์“ด ๊ฒƒ์ฒ˜๋Ÿผ) ์‚ฌ๋žŒ๋“ค์—๊ฒŒ controllerAs ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ต์œกํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์ด ์ด ์†์„ฑ์— ๋ถ€๋”ชํž ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰