2013-05-16 4 views
7

첫 번째 AngularJS 앱 만들기.AngularJS : 부분 뷰를 동적으로 페이지로로드

ng-repeat : 제목이로드됩니다. 각 제목은 클릭 할 수 있습니다. 제목을 클릭하면 ajax 호출이 더 많은 JSON 데이터를 가져옵니다. 클릭 한 제목 아래에이 데이터를 추가해야합니다.

일반적인 방법으로 HTML을 문자열로 만들어 소스 코드에 추가합니다. 그러나 AngularJS를 사용하고 있기 때문에 HTML과 부분보기를 만드는 방법이 있어야하고 ng-repeat이 있어야합니다.

어떻게이 작업을 수행 할 수 있습니까?

+2

. Angular의 공식 자습서 (http://docs.angularjs.org/tutorial/step_07) 및이 설명서 항목의이 부분을 살펴보십시오. http://docs.angularjs.org/api/ng.directive:ngView – mirrormx

+0

예. 가장 좋은 방법 인 것 같습니다. 나는 처음에는 노선을 사용하지 않을 것을 생각했지만 이것은 가능할 것입니다. 내가 이해할 수없는 한 가지는 : 어떻게 부분 뷰를 다른 부분 뷰에 "추가"합니까? – user1121487

+1

'ng-include' 지시어를보십시오 : http://docs.angularjs.org/api/ng.directive:ngInclude. 그것으로'ng-include'를 가질 수있는 partials를 포함 할 수 있습니다 - 부분적으로 partials를 갖는 등등. 그리고 부분 적으로 소스를 변경할 수 있습니다 (URL을 문자열 리터럴이 아닌 객체 참조로 설정하면 포함 된 문서 항목의 예에 표시됩니다). – mirrormx

답변

0

다음은 작은 예입니다. JSON은 각 항목의 json 객체에 subItems 배열로 구성되어 있습니다.

JS :

function MyCtrl($scope, $http) { 
    $scope.items = [ {id: 'a', subItems: []}, {id: 'b', subItems: []} ]; 

    $scope.getSubItems = function(item) { 
    $http.get('/sub-items/' + item.id).then(function(response) { 
     //Append the response to the current list of subitems 
     //(incase some exist already) 
     item.subItems = item.subItems.concat(repsonse.data); 
    }); 
    }; 
} 

HTML :

<div ng-repeat="item in items"> 

    <a ng-click="getSubItems(item)">{{item.id}}</div> 
    <div ng-show="item.subItems.length"> 
    <h4>SubItems:</h4> 
    <ul> 
     <li ng-repeat="subItem in item.subItems">{{subItem}}</li> 
    </ul> 
    </div> 

</div> 
+1

감사합니다. 좋은 해결책 인 것 같습니다. 그러나 부분 뷰를 사용하여 생성 된 HTML의 양을 줄이고 응용 프로그램의 구조를 개선하는 편을 선호합니다. 이것은 다른 시간에 편리하게 올 수 있습니다. – user1121487

+1

지시어를 사용하면됩니다. – Nicolas2bert

2

내가 @Nicolas 제안에 따라 지시문을 사용합니다. 이것을 @Andrew가 제안한 것과 결합하면 이런 식으로 할 수 있습니다.

컨트롤러 :

.controller('MainCtrl', function ($scope, $http) { 
    $scope.items = [ 
     {id: 'a', subItems: []}, 
     {id: 'b', subItems: []} 
    ]; 

    $scope.getSubItems = function(id) { 
     $http.get('/sub-items/' + id) 
      .then(function() { 
       $scope.items.subItems = $scope.items.subItems.push(response.data); 
      }); 
    } 
}); 

보기 :

<div ng-repeat="item in items"> 
    <a ng-click="getSubItems(item)">{{item.id}}</a> 
    <list sub-items="item.subItems"></list> 
</div> 

지침 :

페이지에 라우팅 구현을위한 좋은 경기를 같은 소리
.directive('list', function() { 
    return { 
     restrict: 'E', 
     scope: { 
      subItems: '=subItems' 
     }, 
     template: '<ul>' + 
      '<li ng-repeat="subItem in subItems">{{subItem.id}}</li>' + 
      '</ul>' 
    }; 
}); 
관련 문제