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 相关文章推荐
json原理分析及实例介绍
Nov 29 Javascript
js简单的点击返回顶部效果实现方法
Apr 10 Javascript
jquery.serialize() 函数语法及简单实例
Jul 08 Javascript
jQuery图片轮播实现并封装(一)
Dec 03 Javascript
jquery仿京东侧边栏导航效果
Mar 02 Javascript
bootstrap日期控件问题(双日期、清空等问题解决)
Apr 19 Javascript
利用vue + koa2 + mockjs模拟数据的方法教程
Nov 22 Javascript
Vue Socket.io源码解读
Feb 07 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 Javascript
JS实现带阴历的日历功能详解
Jan 24 Javascript
微信小程序登录session的使用
Mar 17 Javascript
es6函数中的作用域实例分析
Apr 18 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
php邮件发送,php发送邮件的类
2011/03/24 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
PHP Trait代码复用类与多继承实现方法详解
2019/06/17 PHP
映彩衣的js随笔(js图片切换效果)
2011/07/31 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
javascript自执行函数
2017/02/10 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
推荐下python/ironpython:从入门到精通
2007/10/02 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
2019/02/20 Python
Django  ORM 练习题及答案
2019/07/19 Python
PyCharm更改字体和界面样式的方法步骤
2019/09/27 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
写给女生的道歉信
2014/01/14 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
校园环保建议书
2014/05/14 职场文书
高中综合实践活动总结
2014/07/07 职场文书
食品安全演讲稿
2014/09/01 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
务虚会发言材料
2014/12/25 职场文书
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers