018-树形组件

1. 模块加载名称: tree。

2. 核心方法

2.1. 通过tree.render(options)方法指定一个元素, 便可快速创建一个tree实例。

3. 基础参数

3.1. 目前tree组件提供以下基础参数, 可根据需要进行相应的设置:

4. 数据源属性选项

4.1. 我们将data参数称之为数据源, 其内部支持设定以下选项:

5. 节点被点击的回调 - click

5.1. 在节点被点击后触发, 返回的参数如下:

<script type="text/javascript">
	layui.use(['tree'], function() {
		var tree = layui.tree;

		// 渲染
	    tree.render({
	      	elem: '#test1'  // 指向容器选择器            
	      	,click: function(obj) {
		    	console.log(obj.data); // 得到当前点击的节点数据
		    	console.log(obj.state); // 得到当前节点的展开状态: open、close、normal
		    	console.log(obj.elem); // 得到当前节点元素
		    	console.log(obj.data.children); // 当前节点下是否有子节点
		  	}
	    });
	});              
</script>

6. 复选框被点击的回调 - oncheck

6.1. 点击复选框时触发, 返回的参数如下:

<script type="text/javascript">
	layui.use(['tree'], function() {
		var tree = layui.tree;

		// 渲染
	    tree.render({
	      	elem: '#test1'  // 指向容器选择器            
	  	  	,oncheck: function(obj) {
			    console.log(obj.data); // 得到当前点击的节点数据
			    console.log(obj.checked); // 得到当前节点的展开状态: open、close、normal
			    console.log(obj.elem); // 得到当前节点元素
			}
	    });
	});              
</script>

7. 操作节点的回调 - operate

7.1. 通过operate实现函数, 对节点进行增删改等操作时, 返回操作类型及操作节点:

<script type="text/javascript">
	layui.use(['tree'], function() {
		var tree = layui.tree;

		// 渲染
	    tree.render({
	      	elem: '#test1'  // 指向容器选择器            
		  	,operate: function(obj){
			    var type = obj.type; // 得到操作类型: add、edit、del
			    var data = obj.data; // 得到当前节点的数据
			    var elem = obj.elem; // 得到当前节点元素
			    
			    // Ajax操作
			    var id = data.id; // 得到节点索引
			    if (type === 'add') { // 增加节点
	
			    } else if (type === 'update') { // 修改节点
			      	console.log(elem.find('.layui-tree-txt').html()); // 得到修改后的内容
			    } else if (type === 'del') { // 删除节点
			      
			    }
		  	}
	    });
	});              
</script>

8. 返回选中的节点数据

8.1. 很多时候tree可能不仅仅只是一个树菜单, 它还用于各种权限控制等场景, 这个时候你需要获得选中的节点。

8.2. 语法: tree.getChecked(id)

8.3. 实例

<script type="text/javascript">
	layui.use(['tree'], function() {
		var tree = layui.tree;

		// 渲染
	    tree.render({
	      	elem: '#test1'  // 指向容器选择器
	      	,id: 'address' // 设定实例唯一索引, 用于基础方法传参使用
	    });

	    // 获得选中的节点
		var checkData = tree.getChecked('address');
	});              
</script>

9. 设置节点勾选

9.1. 除了通过checked参数对节点进行初始勾选之外, 你还可以通过方法动态对节点执行勾选。

9.2. 语法: tree.setChecked(id, checkedId), 参数checkedId: 代表的是数据源中的节点id。 

9.3. 实例

<script type="text/javascript">
	layui.use(['tree'], function() {
		var tree = layui.tree;

		// 渲染
	    tree.render({
	      	elem: '#test1'  // 指向容器选择器
	      	,id: 'address' // 设定实例唯一索引, 用于基础方法传参使用
	    });

		// 执行节点勾选
		tree.setChecked('address', 10000103); // 单个勾选id为10000103的节点
		tree.setChecked('address', [10000104, 10000105]); // 批量勾选id为10000104, 10000105的节点
	});              
</script>

10. 实例重载

10.1. 重载一个已经创建的组件实例, 被覆盖新的基础属性:

<script type="text/javascript">
	layui.use(['tree'], function() {
		var tree = layui.tree;

		// 渲染
	    tree.render({
	      	elem: '#test1'  // 指向容器选择器
	      	,id: 'address' // 设定实例唯一索引, 用于基础方法传参使用
	    });

		 // 可以重载所有基础参数
		tree.reload('address', {
  			// 新的参数
		});
	});              
</script>

11. 例子

11.1. 代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>树形 - layui</title>

		<link rel="stylesheet" href="layui/css/layui.css">
		<script type="text/javascript" src="layui/layui.js"></script>
	</head>
	<body>
		<div id="test1"></div>

		<script type="text/javascript">
			layui.use(['tree'], function() {
  				var tree = layui.tree;
  
				// 渲染
			    tree.render({
			      	elem: '#test1'  // 指向容器选择器
			      	,id: 'address' // 设定实例唯一索引, 用于基础方法传参使用
			      	,showCheckbox: true // 是否显示复选框
			      	,edit: ['add', 'update', 'del'] // 是否开启节点的操作图标
			      	,accordion: true // 是否开启手风琴模式
			      	,onlyIconControl: false // 是否仅允许节点左侧图标控制展开收缩
			      	,isJump: true // 是否允许点击节点时弹出新窗口跳转
			      	,showLine: true // 是否开启连接线
			      	,text: { // 自定义各类默认文本
					  	defaultNodeName: '未命名' // 节点默认名称
					  	,none: '无数据' // 数据为空时的提示文本
					}             
			      	,click: function(obj) {
				    	console.log(obj.data); // 得到当前点击的节点数据
				    	console.log(obj.state); // 得到当前节点的展开状态: open、close、normal
				    	console.log(obj.elem); // 得到当前节点元素
				    	console.log(obj.data.children); // 当前节点下是否有子节点
				  	}
			  	  	,oncheck: function(obj) {
					    console.log(obj.data); // 得到当前点击的节点数据
					    console.log(obj.checked); // 得到当前节点的展开状态: open、close、normal
					    console.log(obj.elem); // 得到当前节点元素
  					}
				  	,operate: function(obj){
					    var type = obj.type; // 得到操作类型: add、edit、del
					    var data = obj.data; // 得到当前节点的数据
					    var elem = obj.elem; // 得到当前节点元素
					    
					    // Ajax操作
					    var id = data.id; // 得到节点索引
					    if (type === 'add') { // 增加节点
			
					    } else if (type === 'update') { // 修改节点
					      	console.log(elem.find('.layui-tree-txt').html()); // 得到修改后的内容
					    } else if (type === 'del') { // 删除节点
					      
					    }
				  	}
			      	,data: [
			      		{
				        	title: '河南省' // 一级菜单
				        	,id: 1000
				        	,children: [{
				          		title: '郑州市' // 二级菜单
				          		,id: 100001
				          		,children: [{
				            		title: '二七区' // 三级菜单
				            		,id: 10000101
				            		,field: 'area'
				            		,href: 'https://www.baidu.com'
				            		,spread: true
				            		,checked: true
				            		,children: [{
				            			title: '城区'
				            			,id: 1000010101
				            		}
				            		,{
				            			title: '大学路街道'
				            			,id: 1000010102
				            		}]
				          		}
				          		,{
				            		title: '郑州经济技术开发区' // 三级菜单
				            		,id: 10000102
				            		,href: 'https://www.baidu.com'
				          		}
				          		,{
				            		title: '郑州航空港经济综合实验区' // 三级菜单
				            		,id: 10000103
				            		,href: 'https://www.baidu.com'
				          		}
				          		,{
				            		title: '郑东新区' // 三级菜单
				            		,id: 10000104
				            		,href: 'https://www.baidu.com'
				          		}
				          		,{
				            		title: '中原区' // 三级菜单
				            		,id: 10000105
				            		,href: 'https://www.baidu.com'
				          		}
				          		,{
				            		title: '郑州高新技术产业开发区' // 三级菜单
				            		,id: 10000106
				            		,href: 'https://www.baidu.com'
				            		,disabled: true
				          		}]
				        	}]
			      		},
			      		{
			        		title: '陕西省' // 一级菜单
			        		,children: [{
			          			title: '西安市' // 二级菜单
			        		}]
			      		}
			      	]
			    });

			    // 获得选中的节点
				var checkData = tree.getChecked('address');

				// 执行节点勾选
				tree.setChecked('address', 10000103); // 单个勾选id为10000103的节点
				tree.setChecked('address', [10000104, 10000105]); // 批量勾选id为10000104, 10000105的节点
			});              
		</script>
	</body>
</html>

11.2. 效果图

猜你喜欢

转载自blog.csdn.net/aihiao/article/details/113039489