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>
  • 相关阅读:
    03.通过商品课程初心商品信息
    04.支付宝支付流程
    02.创建商品(表)应用(App)
    01.商品模块表结构
    七牛云上传视频
    Django之序列化器
    Django之抽象基类
    权限系统
    python实现简单工厂模式
    01.git基本操作
  • 原文地址:https://www.cnblogs.com/yiyangl/p/12508785.html
Copyright © 2011-2022 走看看