이번에는 자체적으로 배열을 선언하는 것이 아닌, 외부에서 json 객체를 가져와서 이를 목록에 뿌려주는 예제를 살펴보자.
jQuery의 ajax 통신과 상당히 유사한 구조를 보이고 있으며, 앵귤러 내장 객체인 $http 객체를 사용해서 백그라운드 데이터 통신을 구현하고 있다.
이미 jQuery의 $ajax에 익숙해져 있다면, 아래의 소스를 살펴보는 것만으로도 비동기 통신 방법을 이해할 수 있을 것이다.
직접 테스트해볼 수 있도록 Plunker 링크도 남긴다.
Plunker
http://plnkr.co/edit/KF3vdSqEW9xpjbUZGQ8n
위의 예제는 간단하게 json 파일을 가져오는 예제이다.
저렇게 가져왔을 뿐인데, 앵귤러JS는 자동적으로 JSON 파일임을 인지해서 파싱하는 섬세함을 지니고 있다.
보다 범용적으로 사용할 수 있는 형태로 $http 사용 예를 만들어 봤다.
성공했을 때와 실패했을 때 처리와, 특별한 컨텐트 타입으로 통신할 때를 위해서 헤더 등도 설정할 수 있도록 했다.
jQuery의 ajax 통신과 상당히 유사한 구조를 보이고 있으며, 앵귤러 내장 객체인 $http 객체를 사용해서 백그라운드 데이터 통신을 구현하고 있다.
이미 jQuery의 $ajax에 익숙해져 있다면, 아래의 소스를 살펴보는 것만으로도 비동기 통신 방법을 이해할 수 있을 것이다.
직접 테스트해볼 수 있도록 Plunker 링크도 남긴다.
Plunker
http://plnkr.co/edit/KF3vdSqEW9xpjbUZGQ8n
<html ng-app ng-controller="PhoneListController">
<!--
하위 모든 요소는 모두 앵귤러 어플리케이션으로 다뤄진다.
-->
<head>
<meta charset="utf-8">
<title>Google Phone Gallery</title>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js">
</script>
<!--
이 태그는 당연하게도 앵귤러js를 로드하고, 더불어 HTML페이지가 모두 로드된 후에
브라우저에 의해 실행되는 콜백을 등록한다.
-->
<script type="text/javascript" charset="utf-8">
/* BODY 태그 안에 ng-controller 에서 할당해준 컨트롤러의 이름과 동일한 자바스크립트 함수가 자동으로 매칭된다. ng-controller에서 호출할 때는 scope 파라메터를 따로 넣지 않았지만, 실제 컨트롤러 함수에서는 아래와 같이 $scope 를 파라메터로 받는다. 백그라운드 통신을 위해 $http를 파라메터로 추가해준다. */
function PhoneListController($scope, $http)
{
/* jQuery의 ajax 통신과 거의 유사하다. */
$http.get('sample.json').success(
function(data)
{
$scope.phones = data;
});
/* 기본값을 미리 번호로 정해주었다. */
/* 기본값을 정하지 않아도 되지만, 그럴경우 선언된 순서대로 표시된다. */
$scope.orderProperty = "no";
/* 이렇게 선언된 배열 형태의 데이터 모델은 후에 NG-REPEAT에 의해 사용된다. */
}
</script>
</head>
<body>
검색 :
<input type="text" ng-model="searchKeyword"/>
<!--
searchKeyword 라는 이름의 앵귤러 모델을 선언해주었다.
여기에 입력된 내용은 searchKeyword 라는 모델에 자동으로 들어간다.
-->
정렬 :
<select ng-model="orderProperty">
<option value="name" selected>이름</option>
<option value="snippet">설명</option>
<option value="no">번호</option>
</select>
<!--
orderProperty 라는 임의의 이름으로 정렬 순서를 정해줄 앵귤러 모델을 선언해 주었다.
-->
<ul>
<li ng-repeat="phone in phones | filter:searchKeyword | orderBy:orderProperty">
번호 : {{phone.no}}<br />
이름 : {{phone.name}}<br />
설명 : {{phone.snippet}}
</li>
</ul>
<p>
현재 검색 키워드 : {{searchKeyword || '없음'}}<br />
현재 정렬 기준 : {{orderProperty}}
</p>
</body>
</html>
위의 예제는 간단하게 json 파일을 가져오는 예제이다.
저렇게 가져왔을 뿐인데, 앵귤러JS는 자동적으로 JSON 파일임을 인지해서 파싱하는 섬세함을 지니고 있다.
보다 범용적으로 사용할 수 있는 형태로 $http 사용 예를 만들어 봤다.
성공했을 때와 실패했을 때 처리와, 특별한 컨텐트 타입으로 통신할 때를 위해서 헤더 등도 설정할 수 있도록 했다.
/* 파라메터로 보낼 임의의 데이터 객체 */
var dataObject =
{
dataNo : $scope.dataNo + "",
dataName : $scope.dataName,
dataContent : $scope.dataContent
};
/* AJAX 통신 처리 */
$http({
method: 'POST', //방식
url: 'http://localhost/jsonURL', /* 통신할 URL */
data: dataObject, /* 파라메터로 보낼 데이터 */
headers: {'Content-Type': 'application/json; charset=utf-8'} //헤더
})
.success(function(data, status, headers, config) {
if( data ) {
/* 성공적으로 결과 데이터가 넘어 왔을 때 처리 */
}
else {
/* 통신한 URL에서 데이터가 넘어오지 않았을 때 처리 */
}
})
.error(function(data, status, headers, config) {
/* 서버와의 연결이 정상적이지 않을 때 처리 */
console.log(status);
});