2014-06-19 4 views
2

div의 무한한 트리를 만들고 싶습니다.재귀 및 무한 반복 - 반복

<div ng-repeat="block in blocks"> 
    <p class="blocke" > {{block.title}} </p> 
    <input class="childButton" ng-model="childName[$index]" type="text" placeholder="child name"> 
    <button class="childButton" ng-click="addChild($index)" >Add child to {{block.title}} </button> 
</div> 

하지만 블록의 모든 블록이 너무에 아이 블록의 배열이 있습니다

이 내가 실제로 뭘하는지입니다.

모든 기존 블록에 대해 위와 동일한 div를 작성하고 싶습니다. 어느 수준이든.

쉬운 방법이 있나요?

답변

2

하위 항목이있는 경우 자체를 호출하는 사용자 지정 지정.을 작성하십시오. 이것은 일부 편집 작업을해야합니다

app.directive('block', ['$compile', function ($compile) { 
    return { 
    restrict: 'E', 
    replace: true, 
    scope: { 
     block: '=' 
    }, 
    template: '<div>' + 
     '<p class="blocke"> {{block.title}} </p>' + 
     '<input class="childButton" ng-model="childName[$index]" type="text" placeholder="child name">' + 
     '<button class="childButton" ng-click="addChild($index)" >Add child to {{block.title}} </button>' + 
    '</div>', 
    link: function($scope, $element) { 
     if (angular.isArray($scope.block.childs) && $scope.block.childs.length > 0) { 
     $element.append('<block ng-repeat="childBlocks in block.childs" block="childBlocks"></block>'); 
     $compile($element.contents().last())($scope); 
     } 
    } 
    }; 
}]); 

사용 <block ng-repeat="block in blocks" block="block></block>

그것이 작동하는 방법 : 지시어는 지시어 템플릿 뷰에서 요소를 대체 한 후 검사 그렇다면, 블록 항목에 대한 몇 가지 차일이있는 경우, 추가 블록 요소 (지시문 자체)를 컴파일하고 컴파일합니다.

이 특정 코드는 테스트되지 않았지만 그와 비슷한 상황입니다.

+0

이 지침을 근거리로 이해하고 있지만 한 가지 문제가 있습니다. 적어도 그것은 나를위한 문제입니다. $ scope.block.childs가 배열인지 테스트하려면 링크 함수에서 this $ scope.block = [{ 'title': '', 'childs': []}와 같은 블록 배열을 가져야합니다. 예를 들면. 그래서 나는 $ scope.block [index] .childs를 검사 할 필요가있다. 어떤 색인으로 그걸 어떻게 할 수 있습니까? – Cratein

+0

이 경우 색인이 필요하지 않습니다. 'ng-repeat = "블록에서이 지시어를 사용할 때 현재 블록 항목을'block ="block "속성을 통해 전달하므로 지시문이 호출 될 때마다'$ scope.block1'의 다른 블록입니다 (처음으로 블록 [0], 블록 [1] 등) – domakas

+0

괜찮습니다. 하지만이 $ scope.block은 결코 설정되지 않습니다 ... 우리는 블록을 가지고 있기 때문에 : '='(나는 그게 무슨 뜻인지 모르겠다) 그리고 나서 블록 = "childBlock"은 모든 블록의 블록 배열이라고 가정합니다 하지만 함수가 처음 $ scope.childs라고 불리는 것은 무의미하므로 $ scope.block.childs를 호출 할 수 없다. – Cratein