全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Angular directive递归实现目录树结构代码实例

整理文档,搜刮出一个Angular directive递归实现目录树结构代码实例代码,稍微整理精简一下做下分享。

效果图:

重点:

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;
  width: 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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# angularjs  # 目录树  # Angular  # directive递归目录  # angular无限递归树  # Angular之指令Directive用法详解  # angularJS+requireJS实现controller及directive的按需加载示例  # 详解angular2采用自定义指令(Directive)方式加载jquery插件  # angularjs使用directive实现分页组件的示例  # 详解angularJs中自定义directive的数据交互  # AngularJS中directive指令使用之事件绑定与指令交互用法示例  # AngularJs directive详解及示例代码  # 学习AngularJs:Directive指令用法(完整版)  # 递归  # 大家多多  # 文档  # span  # include  # children  # leaf  # indictor  # color  # li  # ul  # gt  # treeData  # item  # repeat  # show  # toggleExpandStatus  # click  # src  # expand 


相关文章: 网站制作网站,深圳做网站哪家比较好?  如何通过西部建站助手安装IIS服务器?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  电脑免费海报制作网站推荐,招聘海报哪个网站多?  如何用5美元大硬盘VPS安全高效搭建个人网站?  表情包在线制作网站免费,表情包怎么弄?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  如何通过多用户协作模板快速搭建高效企业网站?  建站之星会员如何解锁更多建站功能?  电商网站制作公司有哪些,1688网是什么意思?  如何用低价快速搭建高质量网站?  开封网站制作公司,网络用语开封是什么意思?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  网站制作服务平台,有什么网站可以发布本地服务信息?  如何通过.red域名打造高辨识度品牌网站?  建站之星北京办公室:智能建站系统与小程序生成方案解析  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  高端建站如何打造兼具美学与转化的品牌官网?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  如何在Tomcat中配置并部署网站项目?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  网页设计与网站制作内容,怎样注册网站?  如何用PHP快速搭建高效网站?分步指南  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  小建面朝正北,A点实际方位是否存在偏差?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  香港服务器租用每月最低只需15元?  建站主机选购指南:核心配置优化与品牌推荐方案  再谈Python中的字符串与字符编码(推荐)  建站之星图片链接生成指南:自助建站与智能设计教程  建站主机是否等同于虚拟主机?  山东网站制作公司有哪些,山东大源集团官网?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  怀化网站制作公司,怀化新生儿上户网上办理流程?  如何通过老薛主机一键快速建站?  广德云建站网站建设方案与建站流程优化指南  如何在阿里云完成域名注册与建站?  网站制作的步骤包括,正确网址格式怎么写?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  建站之星如何快速解决建站难题?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  如何通过虚拟主机快速完成网站搭建?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  中山网站制作网页,中山新生登记系统登记流程?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  建站之星如何防范黑客攻击与数据泄露?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。