angularJS在directive的template中使用ng-template

今天为大家介绍一下在angularjs的directive中使用ng-template的方法。


1.我们的问题是什么?

var page = angular.module('ausp.directive',['ui.tree']);

page.directive('auspTree', ['$templateCache',function($templateCache) {
   return{
       restrict: 'AE',  
       require: ['?^uiTree','?^uiTreeHandle','?^uiTreeNode','?^uiTreeNodes'],
       //templateUrl:'justiceportal/js/directive/treeTemplate.html',
       template : '<script type="text/ng-template" id="angularTreeTemplate"><ol ui-tree-nodes="" style="padding-left:10px;" ng-model="item.children" ng-class="{hidden: collapsed}"><li ng-repeat="item in item.children" ui-tree-node ng-include="angularTreeTemplate"></li></ol></script>',
       scope:false,
       replace:true,
       link: function ($scope,element,attributes) {
           $scope.dept=attributes.dept;
           $scope.readonly=attributes.readOnly;  
       }
    }
  }]);
上述代码的意思是在directive中把ng-template作为指令的template,这么做的意义是把常见的一些代码段封装到指令中,以便多次调用,但是遗憾的是,template不会编译ng-template而是把它当做普通的字符串

2.如何解决?

如上述代码注释掉的templateUrl所示,把template中的内容放入templateUrl所对应的文件是一种解决方式,但是templateUrl受路径的影响,不具有普遍性,所以这种方法扔不能彻底解决我们的问题。

于是我们换一种思路,完全抛弃template与templateUrl使用$templateCache配合directive优先级最高的compile函数,动态载入此模板


var page = angular.module('ausp.directive',['ui.tree']);

page.directive('auspTree', ['$templateCache',function($templateCache) {
   return{
       restrict: 'AE',  
       require: ['?^uiTree','?^uiTreeHandle','?^uiTreeNode','?^uiTreeNodes'],
       scope:false,
       replace:true,
       compile: function(element, attr) {
             var readonly=attr.readOnly;
             if(readonly==undefined||readonly==false){
                 $templateCache.put('treeTemplate', '<ol ui-tree-nodes="" style="padding-left:10px;" ng-model="item.children" ng-class="{hidden: collapsed}"><li ng-repeat="item in item.children" ui-tree-node ng-include="treeTemplate"></li></ol>');
             }else{
                 $templateCache.put('treeTemplate','<ol ui-tree-nodes="" style="padding-left:10px;" ng-model="item.children" ng-class="{hidden: collapsed}"><li ng-repeat="item in item.children" ui-tree-node ng-include="treeTemplate"></li></ol>');
             } 
           return {
               pre: function(scope, iElement, iAttrs, controller) { 
                   scope.treeTemplate='treeTemplate';
                   scope.dept=attr.dept;
               },
               post: function(scope, iElement, iAttrs, controller) {   
                   
               }
           }
       },
       link: function ($scope,element,attributes) {
           $scope.dept=attributes.dept;
           $scope.readonly=attributes.readOnly;  
       }
    }
  }]);

这样我们的问题就解决了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值