zTree在Angular中的使用

   最近项目中需要使用到树形菜单。考虑到zTree的效果不错,就决定使用zTree来进行开发,但是在开发中遇到一个问题是:这些菜单的名称等内容是从数据库中获取的。考虑到Angularjs的特性,决定使用zTree + Angularjs进行开发。

   首先,肯定是在页面中引入Angularjs的相关脚本,例如模块(e.g. app.js)、控制器(e.g. controller.js)、Angularjs的脚本并进行相关标记的使用,然后引入zTree的样式包和zTreed 脚本,可以参看一下代码:

<!DOCTYPE html>
<html lang="zh-CN" ng-app="app">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>树型菜单</title>


    <link href="plugins/bootstrap-3.3.5/css/bootstrap.min.css" rel="stylesheet">
    <link href="css/zTreeStyle.css" rel="stylesheet">
  
  </head>

<% include ./../include/header.html %>
<% include ./../include/top-menu.html %>

 <div id="content" class="content clearfix" ng-controller="wtConfigInfo">
   <ul tree id="tree" style="font:normal 12px/35px 'Arial';color:#dcdcdc;" class="ztree" ng-model="selectNode" value="1" >            
 </div>
 <% include ./../include/footer.html %>

<script src="plugins/jquery-1.11.3.min.js" type="text/javascript"></script>
<script src="plugins/bootstrap-3.3.5/js/bootstrap.min.js" type="text/javascript"></script>
<script src="..//js/angular.min.js" type="text/javascript"></script>
<script src="..//js/angular/app.js" type="text/javascript"></script>
<script src="..//js/angular/controllers.js" type="text/javascript"></script>
<script src="../plugins/zTree/jquery.ztree.all-3.5.js" type="text/javascript"></script>
 </body>
</html>

 在上面的在ul标签中添加了指令tree,这样在加载angularjs中,就可通过指令 tree来进行菜单数据的获取。具体的代码可参考以下代码:

var app = angular.module('app', []);
//树形结构
app.directive('tree',function(){
    return{
        require:'?ngModel',
        restrict:'A',
        link:function($scope,element,attrs,ngModel){
            var setting = {
                data :{
                    simpleData:{
                        enable:true
                    }
                },
                callback:{
                    beforeClick:function(treeId, treeNode) {//点击菜单时进行的处理
                        var zTree = $.fn.zTree.getZTreeObj("tree");
                        if (treeNode.isParent) {
                            zTree.expandNode(treeNode);
                            return false;
                        } else {
                            window.location.href=treeNode.url;
                            return true;
                        }
                    }
                }
            };
            //向控制器发送消息,进行菜单数据的获取
            $scope.$emit("menu",attrs["value"]);//此处attrs["value"]为ul中的value值,此处作为标记使用
            //接受控制器返回的菜单的消息
            $scope.$on("menuData",function(event,data){
                $.fn.zTree.init(element, setting, data);//进行初始化树形菜单
                var zTree = $.fn.zTree.getZTreeObj("tree");
                var selectName = $("#selectName").val();
                if(typeof selectName == "undefined" || selectName == ""){
                    zTree.selectNode(zTree.getNodeByParam("id","1"));//默认第一个选中
                    $("#selectName").val(zTree.getSelectedNodes()[0].code);//赋值
                }else{
                    for(var i =0; i<data.length;i++){
                        if(data[i]["code"] == selectName ){
                            zTree.selectNode(zTree.getNodeByParam("code", data[i]["code"]));
                        }
                    }
                }
            });

        }
    }
});
  在上述代码中,使用$scope.$emit("menu",attrs["value"]);向父控制器发送请求数据,在控制器代码中可以接受此消息,并使用$http向后台进行数据的请求,并将从数据库中请求来的数据发送个子控制器。控制器的代码可参考如下:

function wtConfigInfo($scope,$http){
	
	//接受子控制器发送的消息
	$scope.$on("menu",function(event,params){
		$http.get("/commonfuncode").success(function(data){
			//发送消息给子控制器
			$scope.$broadcast("menuData",dealMenuData(data,params));
		});
	});
}
  这样,就完成了zTree和后台数据的交互。


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值