AngularJS recursive(귀속)

4847 단어
업무 중에 우리는 자주 여러 층의 데이터를 두루 훑어보아야 한다. 만약에 데이터가 이미 알고 있는 등급이라면ng-repeat로 해결할 수 있다. 만약에 데이터의 깊이가 무한하다면, 또는 우리가 무한한 등급의tree를 실현해야 할 때, 어떻게 해야 합니까?
답은ng-include 명령을 사용하여 템플릿으로 돌아가는 것입니다.만약 우리가 다음과 같은 데이터를 가지고 있다면:
$scope.categories = [
  { 
    title: 'Computers',
    categories: [
      {
        title: 'Laptops',
        categories: [
          {
            title: 'Ultrabooks'
          },
          {
            title: 'Macbooks'            
          }
        ]
      },
      {
        title: 'Desktops'
      },
      {
        title: 'Tablets',
        categories: [
          { 
            title: 'Apple'
          },
          {
            title: 'Android'
          }
        ]        
      }
    ]
  },
  {
    title: 'Printers'
  }
];
//

우리의 목표는 하나의 트리를 보여주는 것이다. 이때 우리는 하나의 템플릿을 사용하여 트리의 모든 단계를 렌더링해야 한다. 먼저 내부 연결 템플릿을 정의해야 한다.
<script type="text/ng-template" id="categoryTree">
    {{ category.title }}
    <ul ng-if="category.categories">
        <li ng-repeat="category in category.categories" ng-include="'categoryTree'">           
        </li>
    </ul>
script>

그런 다음 루트 노드에서 반복 템플릿을 참조합니다.
<ul>
    <li ng-repeat="category in categories" ng-include="'categoryTree'">li>
ul> 

실현 원리:
ng-repeat는 데이터가 교체될 때마다 하위 scope를 만듭니다.우리가 템플릿에서 인용한category 변수는 현재의 교체에 속한다. 템플릿이 정상적으로 작동할 수 있는 이유는 템플릿 내부와 외부에서 같은 변수category를 사용했기 때문이다.다른 변수 이름을 사용하고 싶다면ng-init를 사용하여 초기화해야 합니다.
<li ng-repeat="parentCategory in categories" 
    ng-include="'categoryTree'" 
    ng-init="category=parentCategory">
li> 

 
참조:http://benfoster.io/blog/angularjs-recursive-templates
다음으로 전송:https://www.cnblogs.com/kuangliu/p/4146705.html

좋은 웹페이지 즐겨찾기