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 中document.URL 和 windows.location.href 的区别
Nov 11 Javascript
屏蔽F1~F12的快捷键的js函数
May 06 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
Jan 10 Javascript
阻止子元素继承父元素事件具体思路及实现
May 02 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
Jan 07 Javascript
javascript html实现网页版日历代码
Mar 08 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
Feb 09 Javascript
Angular 2.0+ 的数据绑定的实现示例
Aug 09 Javascript
jQuery-ui插件sortable实现自由拖动排序
Dec 01 jQuery
VSCode使用之Vue工程配置eslint
Apr 30 Javascript
vue 解决遍历对象显示的顺序不对问题
Nov 07 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
Jan 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对文件夹递归执行chmod命令的方法
2015/06/19 PHP
php实现图片上传并进行替换操作
2016/03/15 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
Webpack3+React16代码分割的实现
2021/03/03 Javascript
使用Python下载Bing图片(代码)
2013/11/07 Python
python实现dict版图遍历示例
2014/02/19 Python
python中的格式化输出用法总结
2016/07/28 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
2019/12/10 Python
python能在浏览器能运行吗
2020/06/17 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
国际会议邀请函范文
2014/01/16 职场文书
美术专业个人自我评价
2014/01/18 职场文书
全民健身日活动方案
2014/01/29 职场文书
九年级科学教学反思
2014/01/29 职场文书
素食餐饮项目创业计划书
2014/02/02 职场文书
亲子读书活动方案
2014/02/22 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
联谊会开场白
2015/06/01 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server