본문 바로가기

AngularJS

04. AngularJS의 템플릿 시스템

 - 템플릿 시스템 : 화면과 데이터의 분리를 용이하게 함


1) 템플릿의 이해

 - 브라우저에서 사용자가 보는 화면을 그리려면 HTML 문서를 작성해야 한다. 작성한 HTML 문서를 웹서버에 배포해 두면 사용자의 웹 브라우저가 URL을 받아 

서버로 요청을 보내고 웹 서버는 응답으로서 요청한 HTML문서를 보내준다. 웹 어플리케이션도 마찬가지로 HTMLL 문서를 작성해야 한다. 하지만 한번 작성하면 오랫동안 바뀌지 않는 웹 페이지와는 다르게 브라우저의 요청이 있을 때마다 주어진 데이터에 따라 내용이 바뀌어야 한다. 


2)템플릿 작성 시 사용되는 AngularJS의 기능

 - 지시자 : 기본 HTML을 확장하거나 새로 추가한 요소나 속성이다. 

 ng-repeat, ng-app 등이 지시자에 해당한다. 또한 사용자가 만든 재사용할 수 있는 위젯과 같은 지시자도 여기에 해당한다.


 - 마크업 : 기본 HTML 마크업과 이중 중괄호 -{{표현식}}


 - 필터 : 사용자에게 보여주는 데이터의 형식을 필터 처리한다.


 - 폼 컨트롤 : 입력 상자의 유효성 검사를 위해 AngularJS가 폼 태그를 확장했다. 폼 태그를 사용하게 되면 자동으로 폼 컨트롤을 사용한다.


 3) 이중 중괄호와 AngularJS 표현식

<h1>hello {{person.name}}</h1>

 - AngularJS는 템플릿에서 이중 중괄호('{{}}')를 사용해 특정 위치에 표현할 데이터를 지정한다.


◈ AngularJS 표현식과 자바스크립트 표현식과의 차이점

 ① 객체의 접근 : 기본적으로 자바스크립트는 모든 객체를 최상위 객체인 window 객체안에서 찾는다.

이와 반대로 AngularJS는 표현식에 사용된 객체를 scope안에서 찾는다. 

가령 {{user}}라고 작성했다면, user 객체에 접근하는데 window.user가 아닌 scope.user로 scope 객체에 접근하다.

 ② undefined와 null 무시 : 자바스크립트 표현식으로 ovjectA.propertyA라고 작성했다면 만약 objectA가 선언되어 있지 않으면

ObjectA는 undefined일 것이다. Undefined에서 propertyA에 접근하려 했으니 자바스크립트에서는 오류가 발생한다.

이와 다르게 AngularJS는 오류를 발생시키지 않고 무시해 버린다.

즉, 템플릿에 {{objectA.propertyA}}라고 작성되어 있고 scope.objectA가 선언되어 있지 않더라도 아무런 오류가 발생하지 않고

단지 화면에 아무런 값도 출력하지 않는다.

 ③ 제어문 작성이 안됨 : if문과 같은 조건절이나 for문과 같은 반복문 그리고 throw문은 작성할 수 없다.

 ④ 필터 : AngularJS의 필터를 표현식에서 사용할 수 있다. 필터는 파이프(|)를 이용해서 표현식에서 사용할 수 있다.

가령 money가 있고 2000이라는 값이 할당돼 있다면 이때 2000을 2,000원 혹은 $2,000포 표현하고 싶을때

currency 필터를 사용할 수 있다. 템플리사에서 {{money|currency}}와 같은 방식으로 작성하면 된다.

물폰 필터를 직접 만드는 방법도 제공하고 있다. 


◈ AngularJS 표현식 예제 코드

<body ng-init="person={name: '구라', favorite : ['사과','딸기','포도']}">

<h1>Hello {{person.name}}</h1>

<p>좋아하는 과일의 개수 : {{numberOfFavorite=person.favorite.length}}</p>

<p>과일 갯수 * $100 = {{numberOfFavorite * 100 | currency}}</p>

<p>김구라가 맞나요? {{person.name=='구라'}}</p>

<p>좋아하는 과일 수가 4개보다 많나요? {{numberOfFavorite>4}}</p>

<p>scope에 없는 객체 접근 하면? {{car.type.name}}</p>

</body>

◈ AngularJS 표현식 결과