angular复选框式js树形菜单(一)
treeView.html
<ul class="tree-view">
<li ng-repeat="item in treeData" ng-include="itemTemplateUrl||'/treeItem.html'" ></li>
</ul>
treeItem.html
<i ng-click="itemExpended(item, $event);" class="getItemIcon(item)"></i>
<input type="checkbox" ng-model="item.checked" class="check-box" ng-if="canChecked" ng-change="warpCallback('itemCheckedChanged', item, $event)">
<span class='text-field' ng-click="warpCallback('itemClicked', item, $event);">{{item.name}}</span>
<ul ng-if="!isLeaf(item)" ng-show="item.$$isExpend">
<li ng-repeat="item in item.childItems" ng-include="itemTemplateUrl||'/treeItem.html'">
</li>
</ul>
controller.html
<tree-view tree-data="vm.treeData" itemTemplateUrl="vm.itemTemplateUrl"
item-clicked="vm.itemClicked($item)"
item-checked-changed="vm.itemCheckedChanged($item)" can-checked="true">
</tree-view>
treeView.directive
angular.module('app', [])
.directive('treeView',[function(){
return {
restrict: 'E',
templateUrl: '/treeView.html',
scope: {
treeData: '=',
canChecked: '=',
textField: '@',
itemClicked: '&',
itemCheckedChanged: '&',
itemTemplateUrl: '@'
},
controller:['$scope', function($scope){
$scope.itemExpended = function(item, $event){
item.$$isExpend = ! item.$$isExpend;
$event.stopPropagation();
};
$scope.getItemIcon = function(item){
var isLeaf = $scope.isLeaf(item);
if(isLeaf){
return 'fa fa-leaf';
}
return item.$$isExpend ? 'fa fa-minus': 'fa fa-plus';
};
$scope.isLeaf = function(item){
return !item.children || !item.children.length;
};
$scope.warpCallback = function(callback, item, $event){
($scope[callback] || angular.noop)({
$item:item,
$event:$event
});
};
}]
};
}]);
treeView.controller
angular.module('app')
.controller('treeCtrl',function(){
var vm = this;
vm.treeData=[
{
id:"0010",
fatherId:"0000",
name:"流程管理",
checked:true,
childItems:[
{
id:"0020",
fatherId:"0010",
name:"个人任务池",
checked:true,
childItems:[
id:"0030",
fatherId:"0020",
name:"受理",
checked:true,
childItems:[]
]
},
{
id:"0021",
fatherId:"0010",
name:"公共任务池",
checked:false,
childItems:[]
}
]
},
{
id:"0100",
fatherId:"0000",
name:"信息查询",
checked:true,
childItems:[
{
id:"0120",
fatherId:"0100",
name:"计划信息",
checked:true,
childItems:[]
},
{
id:"0120",
fatherId:"0100",
name:"管理人信息",
checked:false,
childItems:[]
}
]
}
];
vm.itemCheckedChanged = function (changeItem) {
if (hasChildItems(changeItem)) {
setChildItems(changeItem);
}
setParentItems(changeItem);
};
function setChildItems(changeItem){
angular.forEach(changeItem.childItems,function(childItem){
changeItem.checked = changeItem.checked;
if(hasChildItems(childItem)){
setChildItems(childItem);
}
})
}
function setParentItems(changeItem){
definedParentItem(vm.treeData,changeItem);
}
function findParentItem(item,changeItem){
definedParentItem(item.childItems,changeItem);
}
function definedParentItem(childItems,changeItem){
var parentItem = _.find(childItems,{id:changeItem.fatherId});
if(!!parentItem){
parentItem.checked = isAllSelected(parentItem);
setParentItems(parentItem);
}else{
angular.forEach(childItems,function(childItem){
if(hasChildItems(childItem)){
findParentItem(childItem);
}
});
}
}
function isAllSelected(item){
var isSelected = [];
if(hasChildItems(item.childItems)){
angular.forEach(item.childItems,function(childItem){
isAllSelected.push(changeItem.checked);
});
}
return isSelected.indexOf(true)!==-1;
}
function hasChildItems(item){
return !!item.childItems && item.childItems.length>0;
}
});
angular复选框式js树形菜单(一)的更多相关文章
- angular复选框式js树形菜单(二)
删除(过滤)树形结构某一个子节点: function filterTreeData(treeData){ angular.forEach(treeData,function(item){ if (it ...
- DOM(十)使用DOM设置单选按钮、复选框、下拉菜单
1.设置单选按钮 单选按钮在表单中即<input type="radio" />它是一组供用户选择的对象,但每次只能选一个.每一个都有checked属性,当一项选择为t ...
- JQuery对单选框,复选框,下拉菜单的操作
JSP <%@ page language="java" import="java.util.*" pageEncoding="utf-8&qu ...
- 单选复选框的js代码取值
单选框 复选框选中后的js代码处理 <script type="text/javascript"> function check(){ document.getElem ...
- angular 复选框checkBox多选的应用
应用场景是这样的,后台返回的数据在页面上复选框的形式repeat出来 可能会有两种需求: 第一:后台返回的只有项,而没有默认选中状态(全是待选状态) 这种情况相对简单只要repeat出相应选项 第二: ...
- JS实现带复选框的下拉菜单
这段时间在做后台的时候需要一个可以复选的下拉菜单,用到的是easyUI中的combo的Demo,先看看官方easyUI:http://www.jeasyui.com/documentation/ind ...
- layui 单选框、复选框、下拉菜单 不显示问题 记录
1. 如果是 ajax嵌套了 页面, 请确保 只有最外层的页面引入了 layui.css 和 layui.js 内层页面 切记不要再次引入 2. layui.use(['form', 'upload ...
- jq获取单选框、复选框、下拉菜单的值
1.<input type="radio" name="testradio" value="jquery获取radio的值" /> ...
- JS树形菜单
超全的JS树形菜单源代码共享(有实例图) 树形菜单是很常用的效果,常用在管理软件当中,但是一套树形菜单已经不能满足需求,所以如果能有一套比较全面的树形菜单JS特效代码,将会非常方便,下面懒人萱将超全的 ...
随机推荐
- 二值法方法综述及matlab程序
在某些图像处理当中一个关键步是二值法,二值化一方面能够去除冗余信息,另一方面也会使有效信息丢失.所以有效的二值化算法是后续的处理的基础.比如对于想要最大限度的保留下面图的中文字,以便后续的定位处理. ...
- numpy的通用函数:快速的元素级数组函数
通用函数(ufunc)是对ndarray中的数据执行元素级运算的函数.可看作简单函数的矢量化包装. 一元ufunc sqrt对数组中的所有元素开平方 exp对数组中的所有元素求指数 In [93]: ...
- 剑指offer 面试43题
面试43题: 题目:1~n整数中1出现的次数 题:输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数.例如,输入12,1~12这些整数中包含1的数字有1,10,11,12一共出现了5次. 解 ...
- [转]linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
原文链接:http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html linux shell有一套自己的流程控制语句,其中包括条件语句 ...
- 编译安装 nginx的http_stub_status_module监控其运行状态
步骤: 1 编译nginx,加上参数 --with-http_stub_status_module 以我自己的编译选项为例: #配置指令 ./configure --prefix=/usr/local ...
- MapX小试
需MapX 控件 string layerName = "12Q3_new"; string tabFile = string.Format(@"E:\map\地图\现在 ...
- PictureBox 双缓冲防止闪屏
Bitmap bm = new Bitmap(this.pbTraffic.Image); BufferedGraphicsContext current = BufferedGraphicsMana ...
- Ubuntu 16.04 php卸载
1.卸载 apache2 sudo apt-get --purge remove apache2* sudo apt-get autoremove apache2 (--purge 是完全删除并且不保 ...
- MyBatis传入多个参数 ,List集合
一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList&q ...
- awk的内置函数
常见awk内置数值函数