为什么Custom Directive与ui-sref冲突?

时间:2014-11-06 09:10:43

标签: javascript angularjs angularjs-directive

以下是指令:

directive('cgHasPermissions', ['$animate', '$rootScope', 'PermissionService', 'PERMISSION', '$compile',  function ($animate, $rootScope, PermissionService, PERMISSION, $compile) {
      return {
        multiElement: true,
        transclude: 'element',
        restrict: 'A',
        $$tlb: true,
        link: function ($scope, $element, $attr, ctrl, $transclude) {
          var block, childScope, previousElements;
          var unregister = $scope.$watch('user', function (newValue, oldValue) {
            var value = $attr.cgHasPermissions;
            var needsPermissions = value || ""
            if($rootScope.user && $rootScope.permissions) {
              unregister()
            }
            needsPermissions = value.replace(/\s+/g,"").split(",");
            needsPermissions = _.map(needsPermissions, function(perm){
              return PERMISSION[perm];
            })
            var user = $rootScope.user;
            if(!needsPermissions || PermissionService.hasPermissions(needsPermissions)){
              if (!childScope) {
                $transclude (function (clone, newScope) {
                  childScope = newScope;
                  clone [clone.length++] = document.createComment (' end cgHasPermissions: ' + $attr.cgHasPermissions + ' ');
                  block = {
                    clone: clone
                  }
                  $animate.enter(clone, $element.parent (), $element);
                });
              }
            } else {
              if (previousElements) {
                previousElements.remove();
                previousElements = null;
              }

              if (childScope) {
                childScope.$destroy();
                childScope = null;
              }

              if (block) {
                previousElements = getBlockNodes (block.clone);
                $animate.leave (previousElements).then(function () {
                  previousElements = null;
                });
                block = null;
              }
            }
          })
        }
      };
    }])

这是HTML

<a ui-sref="addStudentForm" cg-has-permissions="canAddNewStudent,canViewStudent">+</a>

权限如何工作的逻辑没有问题。我已经证实了这一点。每当我删除指令表单HTML时,ui-sref工作得很好但是当我添加我的指令时,ui-sref可能没有执行,并且根本没有添加href属性。

我尝试了点击次数,但也无法正常工作。

该指令中不允许执行其他指令的内容是什么?

我所做的是,获取ng-if的源代码并使用额外的权限检查条件创建我自己的指令,但ng-if是否与其他元素一起工作有什么错误?

0 个答案:

没有答案