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 style 中visibility和display之间的区别
Jan 22 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
Mar 28 Javascript
js解析json读取List中的实体对象示例
Mar 11 Javascript
JavaScript入门系列之知识点总结
Mar 24 Javascript
jquery中live()方法和bind()方法区别分析
Jun 23 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
Nov 18 Javascript
EditPlus中的正则表达式 实战(4)
Dec 15 Javascript
JS定时检测任务任务完成后执行下一步的解决办法
Dec 22 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
Jan 19 Javascript
react开发中如何使用require.ensure加载es6风格的组件
May 09 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
Jun 20 Javascript
浅谈在react中如何实现扫码枪输入
Jul 04 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修改session_id示例代码
2014/01/08 PHP
php更新修改excel中的内容实例代码
2014/02/26 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
PHP人民币金额转大写实例代码
2015/10/02 PHP
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
2016/03/05 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
2018/10/09 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
Python中dict和set的用法讲解
2019/03/28 Python
Python实现直播推流效果
2019/11/26 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
Python中return函数返回值实例用法
2020/11/19 Python
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
水产养殖学应届生求职信
2013/09/29 职场文书
销售自荐信
2013/10/22 职场文书
监理员的岗位职责
2013/11/13 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
产品质量承诺书
2014/03/27 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
小学班主任自我评价
2015/03/11 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
pytorch fine-tune 预训练的模型操作
2021/06/03 Python
Python编程super应用场景及示例解析
2021/10/05 Python
Python中time与datetime模块使用方法详解
2022/03/31 Python