全网整合营销服务商

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

免费咨询热线: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 


相关文章: 七夕网站制作视频,七夕大促活动怎么报名?  寿县云建站:智能SEO优化与多行业模板快速上线指南  网站网页制作专业公司,怎样制作自己的网页?  C++如何使用std::optional?(处理可选值)  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  学校为何禁止电信移动建设网站?  潮流网站制作头像软件下载,适合母子的网名有哪些?  建站VPS能否同时实现高效与安全翻墙?  网站制作价目表怎么做,珍爱网婚介费用多少?  网站企业制作流程,用什么语言做企业网站比较好?  红河网站制作公司,红河事业单位身份证如何上传?  常州自助建站费用包含哪些项目?  建站之星ASP如何实现CMS高效搭建与安全管理?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  ,南京靠谱的征婚网站?  网站制作模板下载什么软件,ppt模板免费下载网站?  如何快速生成橙子建站落地页链接?  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何零基础开发自助建站系统?完整教程解析  名字制作网站免费,所有小说网站的名字?  制作营销网站公司,淘特是干什么用的?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  如何在万网自助建站中设置域名及备案?  高端云建站费用究竟需要多少预算?  如何通过VPS建站实现广告与增值服务盈利?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  如何使用Golang安装API文档生成工具_快速生成接口文档  建站主机功能解析:服务器选择与快速搭建指南  如何选择美橙互联多站合一建站方案?  如何通过远程VPS快速搭建个人网站?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  建站之星24小时客服电话如何获取?  如何快速配置高效服务器建站软件?  b2c电商网站制作流程,b2c水平综合的电商平台?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  seo网站制作优化,网站SEO优化步骤有哪些?  建站之星后台密码遗忘如何找回?  北京网站制作网页,网站升级改版需要多久?  如何快速选择适合个人网站的云服务器配置?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  Python文件管理规范_工程实践说明【指导】  如何高效完成独享虚拟主机建站?  公司网站制作价格怎么算,公司办个官网需要多少钱?  建站上市公司网站建设方案与SEO优化服务定制指南  如何用花生壳三步快速搭建专属网站?  如何高效完成自助建站业务培训?  建站主机无法访问?如何排查域名与服务器问题  宁波免费建站如何选择可靠模板与平台?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢? 

您的项目需求

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