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 相关文章推荐
js封装的textarea操作方法集合(兼容很好)
Nov 16 Javascript
实现变速回到顶部的JavaScript代码
May 09 Javascript
JavaScript作用域链使用介绍
Aug 29 Javascript
javascript获取鼠标点击元素对象(示例代码)
Dec 20 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
Oct 17 Javascript
jQuery操作表单常用控件方法小结
Mar 23 Javascript
jQuery实现定时读取分析xml文件的方法
Jul 16 Javascript
微信小程序 获取当前地理位置和经纬度实例代码
Dec 05 Javascript
Bootstrap中data-target 到底是什么
Feb 14 Javascript
关于使用js算总价的问题
Jun 23 Javascript
原生js获取left值和top值的三种方法
Aug 02 Javascript
微信小程序input抖动问题的修复方法
Mar 03 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之第一天
2006/10/09 PHP
逐步提升php框架的性能
2008/01/10 PHP
关于PHP语言构造器介绍
2013/07/08 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
Seajs的学习笔记
2014/03/04 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
python抓取网页图片示例(python爬虫)
2014/04/27 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
python使用super()出现错误解决办法
2017/08/14 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
电子狗项圈:eDog Australia
2019/12/04 全球购物
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
德尔福集团DELPHI的笔试题
2012/02/22 面试题
五年级科学教学反思
2014/02/05 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
《秋天的图画》教学反思
2016/02/19 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python