zoukankan      html  css  js  c++  java
  • angularjs tree 递归实现

    重点:

    1. 整棵目录树的实现,通过嵌套完成,主要在于对treeItem.html的递归使用

    <script type="text/ng-template" id="treeView.html">
     
      <ul>
     
        <li ng-repeat="item in treeData.children" ng-include="'treeItem.html'"></li>
     
      </ul>
     
    </script>
     
     
     
    <script type="text/ng-template" id="treeItem.html">
     
      <span class="color-indictor" ng-class="{'leaf-node': isLeaf(item), 'expand-node': !isLeaf(item) && item.isExpand, 'unexpand-node': !isLeaf(item) && !item.isExpand}" ng-click="toggleExpandStatus(item)"></span>
     
      <span>{{item.name}}</span>
     
      <ul ng-if="!isLeaf(item)" ng-show="item.isExpand">
     
        <li ng-repeat="item in item.children" ng-include="'treeItem.html'"></li>
     
      </ul>
     
    </script>

    2. 点击展开/关闭目录树

    通过ng-show对item.expand进行判断,点击item时切换其expand参数,完成目录树的打开与关闭

    3. 源码

    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.9/angular.js"></script>
    <script>
    angular.module("treeApp", [])
    .controller("treeController", function($scope){
      $scope.jsonData = {
        name: 'menu',
        children: [{
          name: 'A',
          children: [{
            name: 'A.1',
            children: [{
              name: 'A.1.1',
              children: []
            }]
          },{
            name: 'A.2',
            children: [{
              name: 'A.2.1',
              children: [{
                name: 'A.2.1.1',
                children: []
              }]
            },{
              name: 'A.2.2',
              children: []
            }]
          }]
        },{
          name: 'B',
          children: [{
            name: 'B.1',
            children: []
          },{
            name: 'B.2',
            children: []
          }]
        },{
          name: 'C',
          children: []
        }]
      };
    }).directive('treeView', function(){
      return {
        restrict: 'E',
        templateUrl: 'treeView.html',
        scope: {
          treeData: '='
        },
        controller: function($scope){
          $scope.isLeaf = function(item){
            return !item.children || !item.children.length;
          };
          $scope.toggleExpandStatus = function(item){
            item.isExpand = !item.isExpand;
          };
        }
      };
    });
    </script>
    <style>
    ul{
      list-style: none;
    }
    .color-indictor{
      display: inline-block;
       20px;
      height: 20px;
      cursor: pointer;
    }
    .color-indictor.leaf-node{
      background: red;
    }
    .color-indictor.unexpand-node{
      background: green;
    }
    .color-indictor.expand-node{
      background-color: yellow;
    }
    </style>
    <body ng-app="treeApp" ng-controller="treeController">
      <div>
      <p>Introduce: Click green block expand the menu tree</p>
      <p>Red: Leaf node, can not click</p>
      <p>Green: Unexpand node, click to expand menu</p>
      <p>Yellow: Expanded node, click to unexpand menu</p>
      </div>
      <tree-view tree-data="jsonData"></tree-view>
    </body>
     
    <script type="text/ng-template" id="treeView.html">
      <ul>
        <li ng-repeat="item in treeData.children" ng-include="'treeItem.html'"></li>
      </ul>
    </script>
    <script type="text/ng-template" id="treeItem.html">
      <span class="color-indictor" ng-class="{'leaf-node': isLeaf(item), 'expand-node': !isLeaf(item) && item.isExpand, 'unexpand-node': !isLeaf(item) && !item.isExpand}" ng-click="toggleExpandStatus(item)"></span>
      <span>{{item.name}}</span>
      <ul ng-if="!isLeaf(item)" ng-show="item.isExpand">
        <li ng-repeat="item in item.children" ng-include="'treeItem.html'"></li>
      </ul>
    </script>
  • 相关阅读:
    WINCE串口打印信息的屏蔽与打开
    WINCE系统时间设置
    WINCE调试常见错误
    今天开始研究arcgisserver
    今天开始,放弃项目管理,做技术了
    java数据库连接
    [转]建一个XMLHttpRequest对象池
    Linux下jsp开发环境,apache,tomcat服务器配置过程
    div+css布局漫谈
    新图纸总结
  • 原文地址:https://www.cnblogs.com/yiyangl/p/12508785.html
Copyright © 2011-2022 走看看