CHAPTER 5. The templating syntax
Interpolation
๋ณด๊ฐ๋ฒ์ ๊ฐ๋จํ ์ปจ์ ์ ์ํ ํ๋์ ํฐ ๋จ์ด์ด๋ค.
Angular๊ฐ ํ๊ทธ๋ฅผ ์ฐพ์ ๋๋ง๋ค ํ์ฑํ๋๋ PonyRacerAppComponent๊ฐ ์๋ค. PonyRacerAppComponent๋ numberofUsers ๋ผ๋ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ํ ํ๋ฆฟ์ ํ๊ทธ์์ ๊ฐ์ ๋ณด์ฌ์ฃผ๋ ํํ์์ธ ์ด์ค๊ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด์ฌ์ง๊ณ ์๋ค.
๋ ํด๋น ๊ฐ์ผ๋ก ๋์ฒด๋ ๊ฒ์ด๋ค. Angular๊ฐ ์ด๋ผ๋ ํ๊ทธ๋ฅผ ๊ฐ์งํ ๊ฒฝ์ฐ์, Angular๋ PonyRacerAppComponent ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ํด๋น ์ธ์คํด์ค๋ ํ ํ๋ฆฟ์ ํํ์์ ๋ํ ๋ฌธ๋งฅ์ด๋ค. PonyRacerAppComponent ์ธ์คํด์ค๋ numberOfUsers ๋ผ๋ ๋ณ์๋ฅผ 146์ผ๋ก ์ค์ ํ ๊ฒ์ด๊ณ ์ฐ๋ฆฌ๋ ํ๋ฉด์ 146 ๊ฐ์ ํ์ธํ ๊ฒ์ด๋ค.
๊ฐ์ฒด ์์์ numberOfUsers๋ผ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํ ํ๋ฆฟ์ ์๋์ผ๋ก ๋ณ๊ฒฝ๋์ด ๋ณด์ฌ์ง ๊ฒ์ด๋ค. ์ด๊ฒ์ '๋ณํ ๊ฐ์ง'๋ผ๊ณ ๋ถ๋ฆฌ์์ง๋ฉฐ Angular์ ๊ต์ฅํ ์ฅ์ ์ค์ ํ๋์ด๋ค.
๊ธฐ์ตํ ์ค์ํ ํ ๊ฐ์ง ์ฌ์ค์ ๋ง์ฝ ์ฐ๋ฆฌ๊ฐ value๋ฅผ ์กด์ฌํ์ง ์๋๋ค๊ณ ํํํ๋ ค๊ณ ํ๋ค๋ฉด, Angular ๋ undefined ๋ณด๋ค๋ ๋น ๋ฌธ์์ด๋ก ๋ณด์ฌ์ง ๊ฒ์ด๋ค. null ์ผ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
๊ฐ๋จํ ๋ณ์ ๋์ ์ ๋ณต์กํ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
๋ณด์๋ค์ํผ, ์ฐ๋ฆฌ๋ ๊ฐ์ฒด์ ์์ฑ์ ์ ๊ทผํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์ข ๋ ๋ณต์กํ ํํ์์ ์ฝ์ ํ ์ ์๋ค.
๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ํด๋์ค์ ์กด์ฌํ์ง ์๋ ๋ณ์๋ฅผ ํ ํ๋ฆฟ์์ ์ ๋ ฅํ๋ค๋ฉด ์ด๋ ํ ์ผ์ด ๋ฐ์ํ ๊ฒ์ธ๊ฐ?
์ฑ์ ๋ก๋ฉํ๋ฉด ์ฐ๋ฆฌ๋ ์ด๋ฌํ ์๋ฌ๋ฅผ ํ์ธํ ๊ฒ์ด๋ค.
์ด์ ๋ ํ ํ๋ฆฟ์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ๋์์ก๋ค. Angular 1๋ฒ์ ผ์์ ๊ฐ์ฅ ์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์ ์ค ํ๋๋ ์ด๋ฌํ ์ ํ์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ ์ ์๊ธฐ ๋๋ฌธ์ ํด๊ฒฐํ๋๋ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์๋ค.
๋ด ์ฌ์ฉ์ ๊ฐ์ฒด๊ฐ ์ค์ ๋ก ์๋ฒ์์ ๊ฐ์ ธ์์ ์๋ฒ ํธ์ถ์ ๊ฒฐ๊ณผ๋ก ํ๊ฐ๋๊ธฐ ์ ์ undefined๋ก ์ด๊ธฐํ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ํ ํ๋ฆฟ์ ์ปดํ์ผ ํ ๋ ์ค๋ฅ๋ฅผ ๋ฐฉ์ง ํ ์์๋ ๋ฐฉ๋ฒ์ด ์์๊น?
๊ทธ๋ ๋ค. user.name์ ์ฌ์ฉํ๋ ๋์ user?.name์ ์ฌ์ฉํ๋ฉด ํด๊ฒฐํ ์ ์๋ค.
๋น์ ์ ์ด์ ๋์ด์ ์ด๋ ํ ์๋ฌ๋ ์์๊ฒ์ด๋ค. "?."๋ ๋๋๋ก ์์ ํ ํํ์ด๋ค. ์ด์ ๋น์ ์ ํ ํ๋ฆฟ์ ์์ ํ๊ฒ ์์ฑํ ์ ์๊ณ ์ ์ ํ๊ณ ํ์คํ๊ฒ ์ํํ ์ ์์๊ฒ์ด๋ค. ์ฐ๋ฆฌ์ ์์ ๋ก ๋์๊ฐ๋ณด์. ์ฐ๋ฆฌ๋ ๋ฐ์ ๋ฉ์์ง๋ฅผ ํํํ ๊ฒ์ด๋ค. ์๋ง๋ ์ฐ๋ฆฌ๋ ๋ค์ ์คํ ์์๋ ๋ค๊ฐ์ค๋ pony races๋ฅผ ํํํ ์ ์์๊ฒ์ด๋ค.
๊ทธ๊ฒ์ ์ฐ๋ฆฌ๋ก ํ์ฌ๊ธ ์ฐ๋ฆฌ์ ๋ ๋ฒ์งธ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ๋๋ก ์ด๋ ๊ฒ์ด๋ค. ํ์ฌ๋ก์๋ ๊ฐ๋จํ๊ฒ ๋ง๊ธ ๊ฒ์ด๋ค.
์ด์ ์ด ๊ตฌ์ฑ ์์๋ฅผ PonyRacerAppComponent ํ ํ๋ฆฟ์ ํฌํจํ๋ ค๊ณ ํ๋ค. ์ฐ๋ฆฌ๋ ๋ฌด์์ ํด์ผ ํ๋๊ฐ?
Using other components in our templates
์ฐ๋ฆฌ๋ PonyRace ๊ตฌ์ฑ ์์ ์ธ RacesComponent๋ฅผ ํ์ํ๋ ค๋ PonyRacerAppComponent๋ผ๋ ์์ฉ ํ๋ก๊ทธ๋จ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๋ณด์๋ค์ํผ ํ ํ๋ฆฟ์ ์ด์ ์ ์ ์ธํ ํ๊ทธ์ ๋งค์นญํ์ฌ RacesComponent ๋ฅผ ํ ํ๋ฆฟ์ ์ถ๊ฐํ์๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋์ํ์ง ์์๊ฒ์ด๋ค. ๋น์ ์ ๋ธ๋ผ์ฐ์ ธ๋ races ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ฃผ์ง ๋ชปํ๋ค. ์ ๊ทธ๋ด๊น? ์ด์ ๋ ๋งค์ฐ ๊ฐ๋จํ๋ค.: Angular๋ racesComponent๋ฅผ ์์ง ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ณ ์น๋๊ฒ์ ๋งค์ฐ ๊ฐ๋จํ๋ค. PonyracerAppComponent ๋ฅผ ์ถ๊ฐํ์๋ ๋ฐฉ๋ฒ์ ๊ธฐ์ตํ๋๊ฐ? ์ฐ๋ฆฌ๋ ์ด์ ๋ ๋ฒ์งธ ์ปดํฌ๋ํธ๊ฐ ์๋ค. ์ด๊ฒ๋ ๋ฐ๋์ ์ ์ธํด ์ฃผ์ด์ผ ํ๋ค. racesComponent๋ root ์ปดํฌ๋ํธ๋ ์๋๋ค. ๊ทธ๋์, ์ด๊ฒ์ ์ ์ธ์ ํด์ฃผ์ด์ผ ํ๋ค.
ํด๋์ค๋ฅผ ์ง์ ์ ์ผ๋ก ์ ๋ฌํ๋ฏ๋ก ํด๋์ค๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ค. ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํ๊ธฐ์ํด์๋ ์์ค ํ์ผ์ธ races.component.ts ์์ RacesComponent ํด๋์ค๋ฅผ ๋ด๋ณด๋ด์ผ ํ๋ค.
์ด์ reces ์ปดํฌ๋ํธ๋ ์ฐ๋ฆฌ์ ๋ธ๋ผ์ฐ์ ธ์ ์ด๋ ๊ฒ ๋ณด์ผ ๊ฒ์ด๋ค.
Property binding
๋ณด๊ฐ๋ฒ์ ํ ํ๋ฆฟ์์ ๋์ ์ธ ๋ถ๋ถ์ ๊ฐ๋ ์ ์ผํ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค. ์ค์ ๋ก ์ฐ๋ฆฌ๊ฐ ๋ณด์๋ ๋ณด๊ฐ๋ฒ์ Angular 2 ํ ํ๋ฆฟ ์์คํ ์ ํต์ฌ ์ธ ์์ฑ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด๋ค.
Angular 2์์๋ ๊ฐ ๋๊ดํธ๋ฅผ ๋๊ดํธ []๋ก ๋ฌถ์ธ HTML ์์์ ํน์ ์์ฑ์ ํตํด ์์ฑํ ์ ์๋ค. ์ฒ์์๋ ์ด์ํ๊ฒ ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ์ ํจํ HTML ์ด๋ค. HTML ์์ฑ์ ๋ฐ์ดํ, ์ดํฌ ์คํธ๋กํผ, ์ฌ๋์, ๊ฐ์, ๊ณต๋ฐฑ๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ๋ฌธ์๋ฅผ ์ ์ธํ๊ณ ์ํ๋ ๋ชจ๋ ๊ฒ์ผ๋ก ์์ํ ์ ์๋ค.
๋๋ DOM ์์ฑ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ง๋ง ์ด์ฉ๋ฉด ์ด๊ฒ์ด ๋น์ ์๊ฒ ๋ช ํํ์ง ์์ ์๋ ์๋ค. ์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก HTML ์์ฑ์ ์ฐ๊ณ ์๋ค.
์์ ์ ๋ ฅ ํ๊ทธ์๋ ๋ ๊ฐ์ง ์์ฑ, ์ฆ ์ ํ ์์ฑ๊ณผ ๊ฐ ์์ฑ์ด ์๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ์ด ํ๊ทธ๋ฅผ ํ์ฑํ๋ฉด ์ผ์นํ๋ ์์ฑ ์ ํ ๋ฐ ๊ฐ์ด์๋ ํด๋น DOM ๋ ธ๋ (HTMLInputElement)๋ฅผ ๋ง๋ ๋ค. ๊ฐ ํ์ค HTML ์์ฑ์๋ DOM ๋ ธ๋์ ํด๋น ์์ฑ์ด ์๋ค. ๊ทธ๋ฌ๋ DOM ๋ ธ๋์๋ ํด๋น ํน์ฑ์ด์๋ ์ถ๊ฐ ์์ฑ๋ ์๋ค. (์ : childElementCount, innerHTML ๋๋ textContent )
์ฌ์ฉ์ ์ด๋ฆ์ ํ์ํ๊ธฐ ์ํ ๋ณด๊ฐ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ค์์ ๊ฐ๋จํ ๊ตฌ๋ฌธ์ด๋ค.
๋๊ดํธ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด DOM ์์ฑ textContent๋ฅผ ์์ ํ ์ ์์ผ๋ฉฐ ๋ณด๊ฐ ์ฉ์ผ๋ก ์ฌ์ฉ ๋ ๊ฒ์ฒ๋ผ ํ์ฌ ๊ตฌ์ฑ ์์ ์ธ์คํด์ค์ ์ปจํ ์คํธ์์ ํ๊ฐ๋๋ user.name ๊ฐ์ ์ง์ ํ๋ค. ๊ตฌ๋ฌธ ๋ถ์๊ธฐ๋ ๋์๋ฌธ์๋ฅผ ์ธ์งํ๊ธฐ ๋๋ฌธ์ ์ ํํ ์ด๋ฆ์ ์ฌ์ฉํด์ผํ๋ค. DOM ์์ฑ์ HTML ์์ฑ๋ณด๋ค ํฐ ์ด์ ์ ๊ฐ์ง๊ณ ์๋ค. ๋ง์ฝ ๋ด๊ฐ ์ ๋ ฅ ์์ ์์ value ์์ฑ์ ํญ์ 'hello'๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐ๋ฉด์ DOM ์ Value ์์ฑ ๋ ธ๋๋ ๋ธ๋ผ์ฐ์ ์ ์ํด ๋์ ์ผ๋ก ์์ ๋๋ฏ๋ก ์ฌ์ฉ์๊ฐ ํ ์คํธ ํ๋์ ์ ๋ ฅ ํ ๋ด์ฉ์ด ๋ชจ๋ ํฌํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์์ฑ์ ๋ถ์ธ ๊ฐ์ ๊ฐ์ง ์ ์์ง๋ง ์ผ๋ถ ์์ฑ์ ์์ ํ๊ทธ์ ์กด์ฌํ๊ฑฐ๋ ๋ถ์ฌํจ์ผ๋ก์จ ์์ฑ์ ๋ฐ์ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, option ํ๊ทธ์ selected ์์ฑ์ด ์๋ค. ์ด๋ค ๊ฐ์ ์ง์ ํ๋์ง์ ์๊ด์์ด ์ต์ ์ด์๋ ํ ์ต์ ์ ์ ํํ๋ค.
Angular 2 ์ ๊ฐ์ ์์ฑ ์ ๊ทผ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด
pony๋ isPonySelected๊ฐ true์ด๋ฉด ์ ํ๋์ด ์ง ๊ฒ์ด๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ํ๋์ง ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ isPonySelected์ ๊ฐ์ด ๋ณํ ๋๋ง๋ค ์ ํ๋ ์์ฑ๋ ๋ณ๊ฒฝ๋ ๊ฒ์ด๋ค.
Angular 1์์๋ ๋ฒ๊ฑฐ๋กญ์ง๋ง ๋ง์ ๊ฒ๋ค์ ํ ์ ์์๋ค. ์๋ฅผ ๋ค์ด ์ด๋ฏธ์ง๋ฅผ ๋์ ์ฃผ์๋ก ๋ฐ์ธ๋ฉ ํ๋๊ฒ์ด ์๋ค.
์ด ๊ตฌ๋ฌธ์ ํฐ ๋ฌธ์ ๊ฐ ์๋ค. ๋ธ๋ผ์ฐ์ ธ๋ src ์์ฑ์ ์ฝ์๋ง์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ์๋ํ ๊ฒ์ด๊ณ ์คํจ๋ก ๋ณด์ฌ์ง ๊ฒ์ด๋ค. ์๋ํ๋ฉด ์ ์ ํจํ URL์ด ์๋ HTTP ์์ฒญ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ Angular 1์์๋ ํน๋ณํ ๋๋ ํฐ๋ธ๊ฐ ์์๋ค. : ng-src
src ๋์ ng-src๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ ํด๊ฒฐํ์๋ค. AngularJS๊ฐ ์ฑ์ ์ปดํ์ผํ๊ณ ๋๋ฉด src ์์ฑ์ ์ฌ๋ฐ๋ฅธ URL์ด ์ถ๊ฐ๋์ด ์ด๋ฏธ์ง ๋ค์ด๋ก๋๊ฐ ์์๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋ ๊ฐ์ง ๋ฌธ์ ์ ์ด ์๋ค.
๋จผ์ ๊ฐ๋ฐ์๋ก์ ng-src์ ์ ๊ณต ํ ๊ฐ์น๋ฅผ ์์์ผ ํ๋ค. ๊ทธ๊ฒ์ 'https://gravatar.com'์ด์์ต๋๊น? ''https://gravatar.com ''? 'pony.avatar.url'? ''? ๋ฌธ์๋ฅผ ์ฝ๋ ๊ฒ ์ธ์๋ ์ ๊ธธ์ด ์๋ค.
Angular ํ์ ๊ฐ ํ์ค ์์ฑ์ ๋ํ ์ง์นจ์ ์์ฑํด์ผํ์ต๋๋ค.
๊ทธ๋ค์ ๊ทธ๋ ๊ฒํ๊ณ , ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ๋ค์ ๋ฐฐ์์ผํ๋ค.
๊ทธ๋ฌ๋ ์ด์ ๋ HTML์ ์ธ๋ถ ์น ๊ตฌ์ฑ ์์๊ฐ ํฌํจ๋ ์์๋ ์ธ์์ ์๋ค.
Web Component๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ Web Component ๊ฐ๋ฐ์๊ฐ ์ฃผ์ ๊น๊ฒ ์ฒ๋ฆฌ ํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋๋ถ๋ถ์ JS ํ๋ ์ ์ํฌ์์ ๋์ ๊ฐ์ ์ ๋ฌํ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์๋ค. ์์ธํ ๋ด์ฉ์ Web Component ์ฑํฐ๋ฅผ ์ฝ์ด๋ณด๋๋ก ํด๋ผ.
Web Component๋ ๋ธ๋ผ์ฐ์ ธ ์๋ฆฌ๋จผํธ์ฒ๋ผ ๋์ํด์ผ ํ๋ค. Web Component๋ค์ Angular 2๊ธฐ๋ฐ์ ์์ฑ, ์ด๋ฒคํธ, ํจ์ ๋ฑ์ ๊ฐ์ ธ์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์์ ์ผ๋ก ๋์ํ๋ค. Angular๋ ์์ฑ๊ณผ ์์์ ๋ํ ๋๊ธฐํ๋ฅผ ์ ์งํ ๊ฒ์ด๋ค. ๋ ์ด์ ์ง์์ด๋ฅผ ๋ฐฐ์ธ ํ์๊ฐ ์๋ค. ์์๋ฅผ ์จ๊ธฐ๋ ค๋ฉด ํ์ค ์จ๊น ์์ฑ์ ์ฌ์ฉํ ์ ์๋ค.
ishidden์ด true์ผ ๊ฒฝ์ฐ div๋ ์ฌ๋ผ์ง ๊ฒ์ด๋ค. Angular๋ ์จ๊ฒจ์ง ์์ฑ๊ณผ ์ง์ ์๋ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ ์ด์ Angular์์ ์ฌ์ฉ๋ directives ์ค์ ํ๋ ์ธ ng-hide์ ๊ฐ์ directive๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์๋ค. ์คํ์ผ ์์ฑ์ color ์์ฑ๊ณผ ๊ฐ์ด ์ค์ฒฉ๋ ์์ฑ์ ์ ๊ทผํ ์๋ ์๋ค.
foreground์ ์์ฑ์ด '๋ น์'์ผ๋ก ๋ณํ๋ค๊ณ ํ๋ฉด, color๋ ๋ น์์ผ๋ก ๋ณํ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ Angular 2๋ ์์ฑ์ ์ฌ์ฉํ๊ณ ์๋ค. ์ด๋ค ๊ฐ์ ์ ๋ฌํ ์ ์์๊น? ์ฐ๋ฆฌ๋ ์ด๋ฏธ ๋ณด๊ฐ ์์ฑ property="" ์ ์ด๋ฏธ ๋ณด์๋ค.
์ด๊ฒ์ [property] ="expression"๊ณผ ๋์ผํ๋ค.
'Pony' ๊ธ์ ๋ค์ pony์ ์ด๋ฆ์ ๋ง ๋ถ์ด๊ธฐ๋ฅผ ์ํ๋ค๋ฉด ๋น์ ์ ๋ ๊ฐ์ง ์ต์ ์ด ์๋ค.
๋ง์ฝ ๋น์ ์ด ๋์ ์ธ ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด property = "value" ์ ๊ฐ์ด ๊ฐ๋จํ๊ฒ ์ ์ ์ ์๋ค.
์ด๋ค ๋ชจ๋๋ ๋๋ฑํ๊ณ ๊ตฌ๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ์ค๊ณํ๋ ๋ฐฉ๋ฒ์ ๋ฌ๋ ค ์์ง ์๋๋ค. ๊ตฌ์ฑ ์์๊ฐ ๊ฐ ๋๋ ์ฐธ์กฐ ์๋ฅผ ๊ธฐ๋ํ๊ณ ์๋์ง๋ฅผ ์์์ผํ๋ AngularJS 1.x์ ๊ฒฝ์ฐ์ ๊ฐ๋ค๊ณ ํ ์ ์๋ค.
Events
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ค๋ฉด, ์ผ์ ํ์ํ๋ ๊ฒ์ด ์ผ์ ํ ๋ถ๋ถ ์ผ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ์ฒ๋ฆฌํด์ผํ๋ค๋ ๊ฒ์ ์๊ณ ์์ด์ผ ํ๋ค. ์ด๋ฅผ ํ์ฉํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ธ๋ ๋น์ ์ด ๋ฐ์ ์ ์ ์ด ํ ์ ์๋๋ก ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค. click, keyup, mousemove ๋ฑ ... AngularJS 1.x๋ ์ด๋ฒคํธ ๋น ํ๋์ ์ง์๋ฌธ์ ๊ฐ์ง๊ณ ์๊ณ , ng-click, ng-keyup, ng-mousemove ๋ฑ ... Angular 2์์ ์ด๊ฒ์ ๋์ฑ ๊ธฐ์ตํ๊ธฐ ์ฝ๊ณ ๊ฐ๋จํ๊ฒ ์ค๊ณํ์๋ค.
์ฐ๋ฆฌ RacesComponent๋ก ๋์๊ฐ์, ์ด์ ํด๋ฆญํ์ ๋ ๋ ์ด์ค๋ฅผ ํ์ ํ ๋ฒํผ์ด ํ์ํ๋ค. ์ํธ์์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ๊ฒ์ด๋ค.
์ ์์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด onButtonClick () ๋ฉ์๋์ ํธ์ถ์ด ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ฐ์ํ๋ค.
๋ง์ฝ ๋น์ ์ ๋ธ๋ผ์ฐ์ ธ์์ ์๋ํ๋ ค๋ฉด, ๋น์ ์ ์ฒ์์ ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ํ์ธํ ๊ฒ์ด๋ค.
ํด๋ฆญํ ์ดํ์ '0 races'๋ '2 races'๋ก ๋ณํ ๊ฒ์ด๋ค. ๋ช ๋ น๋ฌธ์ ํจ์ ํธ์ถ์ด ๋ ์๋ ์์ง๋ง ์คํ ๊ฐ๋ฅํ ๋ช ๋ น๋ฌธ ๋๋ ์คํ ๊ฐ๋ฅํ ๋ช ๋ น๋ฌธ์ ์ฐ์์ผ ์๋ ์๋ค.
๊ทธ๋ฌ๋ ๋๋ ์ด๊ฒ์ ๊ถ๊ณ ํ์ง๋ ์๋๋ค. ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ ์บก์ํ ํ๋๋ฐ ๋ ์ข์ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ฝ๋๋ฅผ ์ ์ง ๊ด๋ฆฌํ๊ณ ํ ์คํธํ๊ธฐ๊ฐ ์ฌ์ฐ๋ฉฐ ๋ณด๊ธฐ๊ฐ ๋ ๋จ์ํ๋ค.
์ข์ ์ ์ ํ์ค DOM ์ด๋ฒคํธ๋ฟ๋ง ์๋๋ผ ๋ฐ์์ํฌ ์ ์๋ ์ฌ์ฉ์ ์ ์ ์ด๋ฒคํธ์์๋ ์๋ํ๋ค๋ ๊ฒ์ด๋ค. Angular ๊ตฌ์ฑ ์์ ๋๋ ์น ๊ตฌ์ฑ ์์์์ ๊ฐ์ ธ์ฌ๊ฒ์ด๋ค. ๋์ค์ ๋ง์ถค ์ด๋ฒคํธ๋ฅผ ์์ํ๋ ๋ฐฉ๋ฒ์ ์ดํด ๋ณด๊ฒ ๋ค.
์ ์ ๋์ RacesComponent ๊ตฌ์ฑ ์์๊ฐ ์๋ก์ด ๊ฒฝ์ฃผ๋ฅผ ์ฌ์ฉํ ์ ์์์ ์ฑ์ ์๋ฆฌ๊ธฐ ์ํด ๋ง์ถค ์ด๋ฒคํธ๋ฅผ ๋ด ๋ณด๋๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
๊ตฌ์ฑ ์์์ newRaceAvailable์ด๋ผ๋ ์ฌ์ฉ์ ์ง์ ์ด๋ฒคํธ๊ฐ ์๊ณ ์ด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด PonyRacerAppComponentis์ onNewRace () ๋ฉ์๋๊ฐ ํธ์ถ๋์์์ ์ฝ๊ฒ ์ ์ ์๋ค. Angular๋ ์์์ ํด๋น ์์์ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ฏ๋ก ๊ฑฐํ์ด ๋ฐ์ํ๋ ์ด๋ฒคํธ์ ๋ฐ์ํ๋ค. ํ ํ๋ฆฟ์ ๊ณ ๋ คํด๋ณด๋๋ก ํ์.
์ฌ์ฉ์๊ฐ div ์์ ํฌํจ ๋ ๋ฒํผ์ ํด๋ฆญํ๋๋ผ๋ onButtonClick () ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค. ์๋ํ๋ฉด ์ด๋ฒคํธ๊ฐ ๊ฑฐํ์ ๋ด๋ฟ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์๋ผ๋ ๋ฉ์๋์์ ์ด๋ฒคํธ์ ์ก์ธ์ค ํ ์ ์๋ค. ๋จ์ง $ event๋ฅผ ๋น์ ์ ๋ฉ์๋์ ๋๊ฒจ ์ฃผ๋ฉด๋๋ค.
๊ทธ๋ฐ ๋ค์ ๊ตฌ์ฑ ์์ ํด๋์ค์์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌ ํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฒคํธ๋ ์ง์์ ์ผ๋ก ๊ฑฐํ์ ๋ด๋ฉฐ ๊ฒฐ๊ตญ ๊ณ์ธต์์ ๋ค๋ฅธ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ฒ๋๋ค. ์ด ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ๋์์ ๋ฐฉ์งํ๊ณ ์ํ๋ ๊ฒฝ์ฐ ์ ํ๋ฅผ ์ทจ์ ํ ์ ์๋ค.
๋ ํ๋์ ํน์ง์ ํค๋ณด๋ ์ด๋ฒคํธ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
spacekey๋ฅผ ๋๋ฅผ ๋๋ง๋ค onSpacePress () ๋ฉ์๋๊ฐ ํธ์ถ์๊ณ (keydown.alt.space) ๋ฑ์ ์ปค์คํฐ๋ง์ด์ง๋ ์ฝค๋ณด๋ฅผ ํ ์ ์๋ค. ์ด ๋ถ๋ถ์ ๊ฒฐ๋ก ์ง๊ธฐ ์ํด ๋๋ ๋ค์๊ณผ ๊ฐ์ด ํฐ ์ฐจ์ด๊ฐ ์์์ ์ง์ ํ๊ณ ์ ํ๋ค.
์ฒซ ๋ฒ์งธ ์์ฑ ๋ฐ์ธ๋ฉ์ doSomething () ๊ฐ์ ์์ด๋ผ๊ณ ๊ฐ ๋ณ๊ฒฝ ๊ฒ์์ฃผ๊ธฐ์์ ํ๊ฐ ๋ ์์ฑ์ ์ ๋ฐ์ดํธ ํ ํ์๊ฐ ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
๊ทธ๋ฌ๋ ๋ ๋ฒ์งธ์ ๊ฒฝ์ฐ๋ ์ด๋ฒคํธ ๋ฐ์ธ๋ฉ์ doSomething () ๊ฐ์ ๋ฌธ์ฅ์ด๋ผ๊ณ ์ด๋ฒคํธ๊ฐ ํธ๋ฆฌ๊ฑฐ ๋ ๊ฒฝ์ฐ์๋ง ํ๊ฐ๋๋ค.
์ ์์ ๋ฐ๋ฅด๋ฉด ๊ทธ๋ค์ ์์ ํ ๋ค๋ฅธ ๋ชฉํ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋น์ ์ด ์์ฌ ํ ์ ์๋ฏ์ด, ๊ทธ๋ค์ ๋ค๋ฅธ ์ ํ์ ๊ฐ์ง๊ณ ์๋ค.
Expressions vs statements
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ค๋ฉด, ์ผ์ ํ์ํ๋ ๊ฒ์ด ์ผ์ ํ ๋ถ๋ถ ์ผ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ์ฒ๋ฆฌํด์ผํ๋ค๋ ๊ฒ์ ์๊ณ ์์ด์ผ ํ๋ค. ์ด๋ฅผ ํ์ฉํ๊ธฐ ์ํด ๋ธ๋ผ์ฐ์ ธ๋ ๋น์ ์ด ๋ฐ์ ์ ์ ์ด ํ ์ ์๋๋ก ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค. click, keyup, mousemove ๋ฑ ... AngularJS 1.x๋ ์ด๋ฒคํธ ๋น ํ๋์ ์ง์๋ฌธ์ ๊ฐ์ง๊ณ ์๊ณ , ng-click, ng-keyup, ng-mousemove ๋ฑ ... Angular 2์์ ์ด๊ฒ์ ๋์ฑ ๊ธฐ์ตํ๊ธฐ ์ฝ๊ณ ๊ฐ๋จํ๊ฒ ์ค๊ณํ์๋ค.
์ฐ๋ฆฌ RacesComponent๋ก ๋์๊ฐ์, ์ด์ ํด๋ฆญํ์ ๋ ๋ ์ด์ค๋ฅผ ํ์ ํ ๋ฒํผ์ด ํ์ํ๋ค. ์ํธ์์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ๊ฒ์ด๋ค.
์ ์์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด onButtonClick () ๋ฉ์๋์ ํธ์ถ์ด ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ฐ์ํ๋ค.
๋ง์ฝ ๋น์ ์ ๋ธ๋ผ์ฐ์ ธ์์ ์๋ํ๋ ค๋ฉด, ๋น์ ์ ์ฒ์์ ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ํ์ธํ ๊ฒ์ด๋ค.
ํด๋ฆญํ ์ดํ์ '0 races'๋ '2 races'๋ก ๋ณํ ๊ฒ์ด๋ค. ๋ช ๋ น๋ฌธ์ ํจ์ ํธ์ถ์ด ๋ ์๋ ์์ง๋ง ์คํ ๊ฐ๋ฅํ ๋ช ๋ น๋ฌธ ๋๋ ์คํ ๊ฐ๋ฅํ ๋ช ๋ น๋ฌธ์ ์ฐ์์ผ ์๋ ์๋ค.
๊ทธ๋ฌ๋ ๋๋ ์ด๊ฒ์ ๊ถ๊ณ ํ์ง๋ ์๋๋ค. ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ ์บก์ํ ํ๋๋ฐ ๋ ์ข์ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ฝ๋๋ฅผ ์ ์ง ๊ด๋ฆฌํ๊ณ ํ ์คํธํ๊ธฐ๊ฐ ์ฌ์ฐ๋ฉฐ ๋ณด๊ธฐ๊ฐ ๋ ๋จ์ํ๋ค.
์ข์ ์ ์ ํ์ค DOM ์ด๋ฒคํธ๋ฟ๋ง ์๋๋ผ ๋ฐ์์ํฌ ์ ์๋ ์ฌ์ฉ์ ์ ์ ์ด๋ฒคํธ์์๋ ์๋ํ๋ค๋ ๊ฒ์ด๋ค. Angular ๊ตฌ์ฑ ์์ ๋๋ ์น ๊ตฌ์ฑ ์์์์ ๊ฐ์ ธ์ฌ๊ฒ์ด๋ค. ๋์ค์ ๋ง์ถค ์ด๋ฒคํธ๋ฅผ ์์ํ๋ ๋ฐฉ๋ฒ์ ์ดํด ๋ณด๊ฒ ๋ค.
์ ์ ๋์ RacesComponent ๊ตฌ์ฑ ์์๊ฐ ์๋ก์ด ๊ฒฝ์ฃผ๋ฅผ ์ฌ์ฉํ ์ ์์์ ์ฑ์ ์๋ฆฌ๊ธฐ ์ํด ๋ง์ถค ์ด๋ฒคํธ๋ฅผ ๋ด ๋ณด๋๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
๊ตฌ์ฑ ์์์ newRaceAvailable์ด๋ผ๋ ์ฌ์ฉ์ ์ง์ ์ด๋ฒคํธ๊ฐ ์๊ณ ์ด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด PonyRacerAppComponentis์ onNewRace () ๋ฉ์๋๊ฐ ํธ์ถ๋์์์ ์ฝ๊ฒ ์ ์ ์๋ค. Angular๋ ์์์ ํด๋น ์์์ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ฏ๋ก ๊ฑฐํ์ด ๋ฐ์ํ๋ ์ด๋ฒคํธ์ ๋ฐ์ํ๋ค. ํ ํ๋ฆฟ์ ๊ณ ๋ คํด๋ณด๋๋ก ํ์.
์ฌ์ฉ์๊ฐ div ์์ ํฌํจ ๋ ๋ฒํผ์ ํด๋ฆญํ๋๋ผ๋ onButtonClick () ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค. ์๋ํ๋ฉด ์ด๋ฒคํธ๊ฐ ๊ฑฐํ์ ๋ด๋ฟ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์๋ผ๋ ๋ฉ์๋์์ ์ด๋ฒคํธ์ ์ก์ธ์ค ํ ์ ์๋ค. ๋จ์ง $ event๋ฅผ ๋น์ ์ ๋ฉ์๋์ ๋๊ฒจ ์ฃผ๋ฉด๋๋ค.
๊ทธ๋ฐ ๋ค์ ๊ตฌ์ฑ ์์ ํด๋์ค์์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌ ํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฒคํธ๋ ์ง์์ ์ผ๋ก ๊ฑฐํ์ ๋ด๋ฉฐ ๊ฒฐ๊ตญ ๊ณ์ธต์์ ๋ค๋ฅธ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ฒ๋๋ค. ์ด ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ๋์์ ๋ฐฉ์งํ๊ณ ์ํ๋ ๊ฒฝ์ฐ ์ ํ๋ฅผ ์ทจ์ ํ ์ ์๋ค.
๋ ํ๋์ ํน์ง์ ํค๋ณด๋ ์ด๋ฒคํธ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
spacekey๋ฅผ ๋๋ฅผ ๋๋ง๋ค onSpacePress () ๋ฉ์๋๊ฐ ํธ์ถ์๊ณ (keydown.alt.space) ๋ฑ์ ์ปค์คํฐ๋ง์ด์ง๋ ์ฝค๋ณด๋ฅผ ํ ์ ์๋ค. ์ด ๋ถ๋ถ์ ๊ฒฐ๋ก ์ง๊ธฐ ์ํด ๋๋ ๋ค์๊ณผ ๊ฐ์ด ํฐ ์ฐจ์ด๊ฐ ์์์ ์ง์ ํ๊ณ ์ ํ๋ค.
์ฒซ ๋ฒ์งธ ์์ฑ ๋ฐ์ธ๋ฉ์ doSomething () ๊ฐ์ ์์ด๋ผ๊ณ ๊ฐ ๋ณ๊ฒฝ ๊ฒ์์ฃผ๊ธฐ์์ ํ๊ฐ ๋ ์์ฑ์ ์ ๋ฐ์ดํธ ํ ํ์๊ฐ ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
๊ทธ๋ฌ๋ ๋ ๋ฒ์งธ์ ๊ฒฝ์ฐ๋ ์ด๋ฒคํธ ๋ฐ์ธ๋ฉ์ doSomething () ๊ฐ์ ๋ฌธ์ฅ์ด๋ผ๊ณ ์ด๋ฒคํธ๊ฐ ํธ๋ฆฌ๊ฑฐ ๋ ๊ฒฝ์ฐ์๋ง ํ๊ฐ๋๋ค.
์ ์์ ๋ฐ๋ฅด๋ฉด ๊ทธ๋ค์ ์์ ํ ๋ค๋ฅธ ๋ชฉํ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋น์ ์ด ์์ฌ ํ ์ ์๋ฏ์ด, ๊ทธ๋ค์ ๋ค๋ฅธ ์ ํ์ ๊ฐ์ง๊ณ ์๋ค.
Local variables
Angular๊ฐ ๋ณ์๋ฅผ ์ฐพ๊ธฐ ์ํด ๊ตฌ์ฑ ์์ ์ธ์คํด์ค๋ฅผ ๋ณผ ๊ฒ์ด๋ผ๊ณ ๋งํ๋ฉด ๊ธฐ์ ์ ์ผ๋ก ์ฌ๋ฐ๋ฅด์ง ์๋ค. ์ค์ ๋ก ๊ตฌ์ฑ ์์ ์ธ์คํด์ค์ ๋ก์ปฌ ๋ณ์๋ฅผ ๊ฒ์ฌํ๋ค. ์ง์ญ ๋ณ์๋ #syntax๋ฅผ ์ฌ์ฉํ์ฌ ํ ํ๋ฆฟ์์ ๋์ ์ผ๋ก ์ ์ธ ํ ์์๋ ๋ณ์์ด๋ค.
์ ๋ ฅ ๊ฐ์ ํ์ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
syntax๋ฅผ ์ฌ์ฉํ์ฌ DOM ๊ฐ์ฒด ์ธ HTMLInputElement๋ฅผ ์ฐธ์กฐํ๋ ๋ก์ปฌ ๋ณ์ ์ด๋ฆ์ ๋ง๋ ๋ค.
์ด ๋ก์ปฌ ๋ณ์๋ ํ ํ๋ฆฟ์ ์ด๋ ์์น์์๋ ์ฌ์ฉํ ์ ์๋ค. value ์์ฑ์ ๊ฐ์ง๋ฏ๋ก ์ด ์์ฑ์ ๋ณด๊ฐ ๋ ํํ์์ ํ์ ํ ์ ์๋ค. ๋์ค์ ์ด ์์ ๋ก ๋์ ์ค๊ฒ ๋ค.
์ง์ญ ๋ณ์์ ๋ ๋ค๋ฅธ ์ ์ฉํ ์ฌ์ฉ๋ฒ์ ๋ค๋ฅธ ์์์์ ์ด๋ค ์ข ๋ฅ์ ์ก์ ์ ์คํํ๊ณ ์ ํ ๋์ด๋ค.
์๋ฅผ ๋ค์ด, ๋ฒํผ์ ํด๋ฆญ ํ ๋ ์์์ ํฌ์ปค์ค๋ฅผ ๋ ์ ์์ต๋๋ค. ์ด๋ AngularJS 1.x์์ ์ฌ์ฉ์ ์ง์ ์ง์๋ฌธ์ ์์ฑํด์ผํ๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ ๋ฒ๊ฑฐ๋ก์ด ์ ์ด ์์๋ค.
focus () ๋ฉ์๋๋ DOM API์ ํ์ค ๋ถ๋ถ์ด๋ฉฐ์ด๋ฅผ ํ์ฉํ ์ ์๊ณ ์ง์ญ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด Angular 2๋ฅผ ์ฝ๊ฒ ์ ๊ทผ ํ ์ ์๋ค.
๋ํ ์ฌ์ฉ์ ์ ์ ๊ตฌ์ฑ ์์ (์์ฉ ํ๋ก๊ทธ๋จ์์ ์์ฑํ ๊ตฌ์ฑ ์์, ๋ค๋ฅธ ํ๋ก์ ํธ์์ ๊ฐ์ ธ์จ ๊ตฌ์ฑ ์์ ๋๋ ์ค์ ์น ๊ตฌ์ฑ ์์)์ ํจ๊ป ์ฌ์ฉํ ์๋ ์๋ค.
์ฌ๊ธฐ์์ ๋ฒํผ์ ๊ตฌ์ฑ ์์์ ๋์์ ์ฌ์์ ์์ํ ์ ์๋ค. ์ด๊ฒ์ ์ค์ ๋ก Polymer๋ก ์์ฑ๋ ์ค์ ์น ๊ตฌ์ฑ ์์์ด๋ค! ์ด ๊ตฌ์ฑ ์์์๋ ๋จ์ถ๋ฅผ ํด๋ฆญ ํ ๋ Angular๊ฐ ํธ์ถํ๋ play () ๋ฉ์๋๊ฐ ์๋ค.
์ง์ญ ๋ณ์์๋ ๋ช ๊ฐ์ง ์ ์ค ์ผ์ด์ค๊ฐ ์์ผ๋ฉฐ, ์ ์ง์ ์ผ๋ก ์ดํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ ์ค ํ๋๊ฐ ๋ฐ๋ก ๋ค์ ์น์ ์ ์ค๋ช ๋์ด ์์ต๋๋ค.
Structural directives
702/5000 ์ด์ ์ฐ๋ฆฌ์ RacesComponent๋ ์ฌ์ ํ ๋ ์ด์ค๋ฅผ ํ์ํ์ง ์๋๋ค. Angular 2์ "์ ์ ํ ๋ฐฉ๋ฒ"์ ๊ฐ ๋ ์ด์ค๋ฅผ ํ์ํ๋ ๋ ๋ค๋ฅธ ๊ตฌ์ฑ ์์ ์ธ RaceComponent๋ฅผ ๋ง๋๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฝ๊ฐ ๋ ๊ฐ๋จํ ์์ ์ ์ํํ๊ธฐ ์ํด ๊ฐ๋จํ ๋ชฉ๋ก์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
์์ฑ ๋ฐ ์ด๋ฒคํธ ๋ฐ์ธ๋ฉ์ ํ๋ฅญํ์ง๋ง ์ปฌ๋ ์ ์ ๋ฐ๋ณตํ๊ณ ํญ๋ชฉ ๋น ์์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๊ฐ์ด DOM ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ ์๋ ์๋ค. ์ด๋ฅผ ์ํด์๋ ๊ตฌ์กฐ ์ง์๋ฌธ์ ์ฌ์ฉํด์ผํ๋ค. Angular์ ์ง์๋ฌธ์ ์ค์ ๋ก ๊ตฌ์ฑ ์์์ ๋น์ทํ์ง๋ง ํ ํ๋ฆฟ์ด ์๋ค. ์์์ ๋นํค์ด๋น์ด๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. Angular 2์์ ์ ๊ณตํ๋ ๊ตฌ์กฐ ์ง์๋ฌธ์ HTML ์ฌ์์ ํ์ค ํ๊ทธ ์ธ template ์์๋ฅผ ์ฌ์ฉํ๋ค.
์ฌ๊ธฐ์ ํ ํ๋ฆฟ์ ์ ์ํ๊ณ ๊ฐ๋จํ div๋ฅผ ํ์ํ๋ค. ๋ธ๋ผ์ฐ์ ธ๊ฐ ํ์ํ์ง ์์ผ๋ฏ๋ก ๋จ์ผ๋ก๋ ์ฌ์ฉ๋์ง ์๋๋ค. ๊ทธ๋ฌ๋ ํ๋์ 'template'์์๋ฅผ ๋ทฐ์ ์ถ๊ฐํ๋ค๋ฉด Angular 2 ๋ ํด๋น ๋ด์ฉ์ ์ฌ์ฉํ ์ ์๋ค. ๊ตฌ์กฐ์ ์ง์๋ฌธ์๋ ๋ด์ฉ์ ํ์ํ๊ฑฐ๋ ํ์ํ์ง ์๊ณ ๋ฐ๋ณตํ๋ ๋ฑ์ ๊ฐ๋จํ ์์ ์ ์ํ ํ ์ ์๋ค.
NgIf
์กฐ๊ฑด์ด ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ํ ํ๋ฆฟ์ ์ฌ์ฉํ๊ธธ ์ํ๋ค๋ฉด ngIf๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ฌ๊ธฐ์ ํ ํ๋ฆฟ์ race๊ฐ ์ ์ด๋ ํ๋์ ์์๋ฅผ ๊ฐ์ง๊ณ ์์ ๋, ์ฆ race๊ฐ ์๋ค๋ฉด ์ธ์คํด์คํ ๋ ๊ฒ์ด๋ค. ์ด ๊ตฌ๋ฌธ์ ์ฝ๊ฐ ๊ธธ๊ธฐ ๋๋ฌธ์ ์งง์ ๋ฒ์ ์ผ๋ก ๋ณด์ฌ์ฃผ์๋ค.
๊ตฌ๋ฌธ์ *๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐ ์ง์๋ฌธ์์ ๋ํ๋ธ๋ค. ngIf ๋๋ ๊ฒฝ์ฃผ ๊ฐ์ด ๋ณ๊ฒฝ ๋ ๋๋ง๋ค div๊ฐ ํ์๋์ง ์๋๋ค. ๋ ์ด์ ๊ฒฝ์ฃผ๊ฐ ์์ผ๋ฉด div๋ ์ฌ๋ผ์ง๊ฒ์ด๋ค. ํ๋ ์ ์ํฌ์์ ์ ๊ณต๋๋ ์ง์๋ฌธ์ ์ด๋ฏธ ์ฌ์ ๋ก๋๋์ด ์์ผ๋ฏ๋ก @Componentdecorator์ ์ง์์ด ์์ฑ์์ NgIf๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ ์ธ ํ ํ์๊ฐ ์๋ค.
NgFor
์ค์ ๋ฐ์ดํฐ๋ก ์์ ํ๋ฉด ํ์ฐ์ ์ผ๋ก ๋ฌด์ธ๊ฐ์ ๋ชฉ๋ก์ ํ์ํ๊ฒ ๋๋ค. NgFor๋ ๋งค์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ ๋๋ค. ์ปฌ๋ ์ ์ ํญ๋ชฉ ๋น ํ๋์ ํ ํ๋ฆฟ์ ์ธ์คํด์คํ ํ ์ ์๋ค. ์ฐ๋ฆฌ์ RacesComponent ๊ตฌ์ฑ ์์์๋ ์๋ง ์ถ์ธก ํ ์ ์๋ฏ์ด ํ์ ํ ๊ฒฝ์ฃผ์ ๋ฐฐ์ด ์ธ ํ๋ ๊ฒฝ์ฃผ๊ฐ ์์ต๋๋ค.
์ด์ ์ฐ๋ฆฌ ์ปฌ๋ ์ ์๋ ํญ๋ชฉ ๋น ํ๋์ li ํ๊ทธ๊ฐ์๋ ๋ฉ์ง ๋ชฉ๋ก์ด ์๋ค.
NgFor๊ฐ microsyntax๋ผ๊ณ ํ๋ ํน์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ ์๋ค.
์ฌ๊ธฐ์ ๋น์ ์ด ์ธ์งํ ์ ์๋ ๊ฒ๋ค์ด ์๋ค.
template ์์๋ template ์์ ์๋ ์์๋ค์ ์ ์ํ๋ค.
NgFor ์ง์๋ฌธ์ด ์ ์ฉ๋์ด ์๋ค.
NgForOf ์์๋ ํํํ ์งํฉ์ ๋ํ ์ ์ ์ด๋ค.
race ๋ณ์๋ ํ์ฌ ์์๋ฅผ ๋ฐ์ํ๊ณ ํจ์ถฅ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ฉํ๋ค.
๊ทธ๋ฌ๋ ์ด ๋ชจ๋ ๊ฒ์ ๊ธฐ์ตํ๋ ๊ฒ๋ณด๋ค๋ ์งง์ ํ์์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ ๋ ํจ๊ณผ์ ์ด๋ค.
ํ์ฌ ์์์ ์์ธ์ ๋ฐ์ธ๋ ๋ ๋ค๋ฅธ ์ง์ญ ๋ณ์๋ฅผ ์ ์ธ ํ ์ ์๋ค.
์ง์ญ ๋ณ์ i๋ 0์์ ์์ํ์ฌ ํ์ฌ ์์์ ์ธ๋ฑ์ค๋ฅผ ๋ฐ๋๋ค.
์ ์ฉ ํ ์์๋ ๋ค๋ฅธ ๋ด ๋ณด๋ธ ๋ณ์๋ ์์ต๋๋ค. โข even, ์์๊ฐ ์ง์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ ์ฐธ์ธ ๋ถ์ธ ๊ฐ์ด๋ค. โข odd, ๋ถ์ธ ๊ฐ์ ์์์ ํ์ ์์ธ์ด์๋ ๊ฒฝ์ฐ true์ด๋ค. โข first : ์์๊ฐ ์ปฌ๋ ์ ์ ์ฒซ ๋ฒ์งธ ์์ ์ธ ๊ฒฝ์ฐ ์ฐธ์ธ ๋ถ์ธ๊ฐ ์ด๋ค. โข last : ์์๊ฐ ์ปฌ๋ ์ ์ ๋ง์ง๋ง ์์ ์ธ ๊ฒฝ์ฐ ์ฐธ์ธ ๋ถ์ธ๊ฐ ์ด๋ค.
NgSwtich
์ด๋ฆ์์ ์ง์ํ ์ ์๋ฏ์ด ์ง์๋ฌธ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ํ ํ๋ฆฟ์ ์ ํ ํ ์์๊ฒ ํด์ค๋ค.
๋ณด์๋ค์ํผ ngSwitch๋ ์กฐ๊ฑด์ ์ทจํ๊ณ ngSwitchCase๋ ๊ฐ๋ฅํ ๊ฐ์ ์ทจํ๋ค. ์ผ์นํ๋ ๊ฐ์ด ์์ ๊ฒฝ์ฐ ngSwitchDefault๋ฅผ ํ์ ํ ์๋ ์๋ค.
Other template directives
๋ค๋ฅธ ๋ ๊ฐ์ ์ง์๋ฌธ์ ํ ํ๋ฆฟ์ ์์ฑํ ๋ ์ ์ฉ ํ ์ ์์ง๋ง ๋ฐฉ๊ธ ๋ณธ ๊ฒ๊ณผ ๊ฐ์ ๊ตฌ์กฐ ์ง์๋ฌธ์ ์๋๋ค. ์ด๋ฌํ ์ง์๋ฌธ์ ํ์ค ์ง์๋ฌธ์ด๋ค.
NgStyle
์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ฐ๋ฆฌ๊ฐ ์์์ ์คํ์ผ์ ๋ฐ๋ผ ํ๋ ํ ์ ์์์ ๋ณด์๋ค.
๋์์ ์ฌ๋ฌ ์คํ์ผ์ ์ค์ ํด์ผํ๋ ๊ฒฝ์ฐ ngStyle ์ง์๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ง์๋ฌธ์ ํค๊ฐ ์คํ์ผ์ ์ค์ ํ ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ํ๋ค. ํค๋ camelCase (fontWeight) ๋๋ ๋์ ( 'font-weight') ์ค ํ๋ ์ผ ์ ์๋ค.
NgClass
๊ฐ์ ๋ฌธ๋งฅ์ผ๋ก ํด๋์ค ์ง์์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์์๋ฅผ ๋์ ์ผ๋ก ํด๋์ค์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐ ํ ์ ์๋ค. ์คํ์ผ์ ์์ฑ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ์ฌ ํ๋์ ํด๋์ค๋ฅผ ์ค์ ํ ์ ์๋ค.
๋๋ ์ฌ๋ฌ ํญ๋ชฉ์ ๋์์ ์ค์ ํ๋ ค๋ ๊ฒฝ์ฐ ngClass๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
Canonical syntax
์ฐ๋ฆฌ๊ฐ ๋ณธ ๋ชจ๋ ๊ตฌ๋ฌธ์ ํ์ค ๊ตฌ๋ฌธ์ด๋ผ๋๋ณด๋ค ๊ธด ์์์ ๊ฐ์ง๊ณ ์๋ค. ์ด๊ฒ์ ์ฃผ๋ก ์๋ฒ ์ธก์ ํ ํ๋ฆฟ ์์คํ ์ด [] ๋๋ () ๊ตฌ๋ฌธ์ ๋ฌธ์ ๊ฐ์์ ๊ฒฝ์ฐ ๋๋, () *๋ฅผ ์ฌ์ฉํ ์์๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค.
์์ฑ ๋ฐ์ธ๋ฉ์ ์ ์ธํ๋ ค๋ ๊ฒฝ์ฐ ๋ค์์ ์ํ ํ ์ ์๋ค.
๋๋ ์ ๊ท ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ํํํ ์ ์๋ค.
์ด๋ฒคํธ ํ ๋น๋ ๋ง์ฐฌ๊ฐ์ง ์ด๋ค.
๋๋ ์ ๊ท ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ํํํ ์ ์๋ค.
Summary
Angular 2 ํ ํ๋ฆฟ ์์คํ ์ HTML์ ๋์ ๋ถ๋ถ์ ํํํ๋ ๊ฐ๋ ฅํ ๊ตฌ๋ฌธ์ ์ ๊ณตํ๋ค. ๋ฐ์ดํฐ์ ์์ฑ ๋ฐ์ธ๋ฉ, ์ด๋ฒคํธ ๋ฐ์ธ๋ฉ ๋ฐ ํ ํ๋ฆฟ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ๋ช ํํ ๋ฐฉ๋ฒ์ผ๋ก ํํํ ์ ์๋ค. ๊ฐ๊ฐ ๊ณ ์ ํ ์ฌ๋ณผ์ด ์๋ค.
โข ๋ณด๊ฐ์ ์ํ โข ์์ฑ ๋ฐ์ธ๋ฉ์ ์ํ [] โข ์ด๋ฒคํธ ๋ฐ์ธ๋ฉ์ ์ํ () โข ๋ณ์ ์ ์ธ์ ์ํ #for โข ๊ตฌ์กฐ ์ง์๋ฌธ์ ์ํ *
๋ค๋ฅธ ํ๋ ์ ์ํฌ์ฒ๋ผ ํ์ค ์น ๊ตฌ์ฑ ์์์ ์ํธ ์์ฉํ ์์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค. ๋ค์ํ ์๋ฏธ ์ฌ์ด์ ๋ชจํธ์ฑ์ด ์์ผ๋ฏ๋ก ํ ํ๋ฆฟ๊ณผ IDE๊ฐ ์ ์ง์ ์ผ๋ก ํฅ์๋์ด ํ ํ๋ฆฟ์์ ์์ฑํ ๋ด์ฉ์ ๋ํ ์๋ฏธ์๋ ๊ฒฝ๊ณ ๋ฅผ ์ป์ ์ ์๋ค. ์ด ๋ชจ๋ ๊ธฐํธ๋ ์ ์ ๋ฒ์ ์ ์งง์ ๋ฒ์ ์ผ๋ก, ์ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ ์๋ ์๋ค. ์ด ๊ตฌ๋ฌธ์ ์ ์ฐฝํ๊ฒํ๋ ค๋ฉด ์๊ฐ์ด ์ข ๊ฑธ๋ฆฌ ๊ฒ ์ง๋ง ๊ณง ์๋๊ฐ ๋นจ๋ผ์ง๋ค. ๊ทธ๋ฌ๋ฉด ์ฝ๊ณ ์ฐ๋ ๊ฒ์ด ์ฝ๋ค. ๊ณ์ ์งํํ๊ธฐ ์ ์ ์ ์ฒด ์์ ๋ฅผ ์ดํด ๋ณด๋๋ก ํ์.
pony ๋ชฉ๋ก์ ํ์ํ๋ PoniesComponent ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๊ณ ์ถ๋ค. ๊ฐ ์กฐ๋๋ง์ PonyComponent ๊ตฌ์ฑ ์์๋ก ๋ํ๋ด์ผํ์ง๋ง ๊ตฌ์ฑ ์์์ ๋งค๊ฐ ๋ณ์๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ์์ง ๋ณด์ง ๋ชปํ๋ค. ์ด์ ๋ ๊ฐ๋จํ ๋ชฉ๋ก์ ๋ณด์ฌ์ค ๊ฒ์ด๋ค. ๋ชฉ๋ก์ ํ์๋์ง ์๋ ๊ฒฝ์ฐ์๋ง ํ์๋์ด์ผ ํ๋ค. ๋น์ด์๋, ๊ทธ๋ฆฌ๊ณ ๋ด ๋ชฉ๋ก์ ์ง์ ๋ผ์ธ์ ๋ํ ๋ช ๊ฐ์ง ์์์ ๊ฐ๊ณ ์ถ๋ค. ๋ง์ง๋ง์ผ๋ก ๋ฒํผ ํด๋ฆญ์ผ๋ก ๋ชฉ๋ก์ ์๋ก ๊ณ ์นจํ๊ณ ์ถ๋ค.
์ด์ ์ฅ์์ ํ ์คํธ ํ PonyRacerAppComponent ๊ตฌ์ฑ ์์์ ์ถ๊ฐ ํ ์ ์๋ค. ์ด๋ฅผ ๊ฐ์ ธ ์์ ์ง์๋ฌธ์ ์ถ๊ฐํ๊ณ </ ns-ponies> ํ๊ทธ๋ฅผ ํ ํ๋ฆฟ์ ์ฝ์ ํด์ผ ํ๋ค.
์ฐ๋ฆฌ๋ Ngfor๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ค๊ฒ์ด๋ค.
์ถ๊ฐ ๋ฒํผ๋ ์ถ๊ฐํด๋ณด์.
๋ณด์๋ค์ํผ, ์ฐ๋ฆฌ๋ ํ ํ๋ฆฟ ๊ตฌ๋ฌธ์ ๋ชจ๋ ๋ฒ์๋ฅผ ์ฌ์ฉํ์ผ๋ฉฐ, ์ฐ๋ฆฌ๋ ์๋ฒฝํ๊ฒ ์๋ํ๋ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ฐ๋ฆฌ์ ๋ฐ์ดํฐ๋ ์ฌ์ ํ ํ๋ ์ฝ๋๋์ด ์๋ค. ๊ณง ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ ์ค๋ ๋ฐฉ๋ฒ์ ์ดํด ๋ณด์! ์ด๊ฒ์ ์์กด์ฑ ์ฃผ์ ์ ๋จผ์ ๋ฐฐ์ฐ๋ฏ๋ก HTTP ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์์์ ์๋ฏธํ๋ค.
Reference URL
Last updated