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


Posted in Javascript onMay 05, 2017

整理文档,搜刮出一个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>

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

Javascript 相关文章推荐
常用一些Javascript判断函数
Aug 14 Javascript
你必须知道的JavaScript 变量命名规则详解
May 07 Javascript
js时间控件只显示年月
Jan 08 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
Apr 25 Javascript
详解Angular 4.x 动态创建组件
Apr 25 Javascript
微信小程序开发之map地图实现教程
Jun 08 Javascript
vue.js 使用axios实现下载功能的示例
Mar 05 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
Apr 27 Javascript
vue+webpack模拟后台数据的示例代码
Jul 26 Javascript
vue中引入第三方字体文件的方法示例
Dec 17 Javascript
vue中使用router全局守卫实现页面拦截的示例
Oct 23 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
Feb 07 Javascript
微信小程序开发图片拖拽实例详解
May 05 #Javascript
javascript 中关于array的常用方法详解
May 05 #Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
May 05 #Javascript
Angular中实现树形结构视图实例代码
May 05 #Javascript
node.JS md5加密中文与php结果不一致的解决方法
May 05 #Javascript
jquery中封装函数传递当前元素的方法示例
May 05 #jQuery
使用JS在浏览器中判断当前网络连接状态的几种方法
May 05 #Javascript
You might like
PHP与SQL注入攻击[三]
2007/04/17 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
postfixadmin忘记密码后的修改密码方法详解
2016/07/20 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
JavaScript中的闭包原理分析
2010/03/08 Javascript
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
2010/05/24 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
javascript操作数组详解
2014/12/17 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
python中ASCII码字符与int之间的转换方法
2018/07/09 Python
详解爬虫被封的问题
2019/04/23 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
行政人员岗位职责
2013/12/08 职场文书
个人委托书范本
2014/04/02 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS