2014-09-29 191 views
1

我有2個指令,1指令是一個工具提示的內容,我有另一個指令在上層的HTML,看看我是否懸停在該元素打開工具提示,現在我想這個父指令,當我懸停在它應用的元素上時,調用子指令內的函數,這將檢查工具提示是否有空間去頂部或其他明智的,它將打開到底部。來自父指令的角度調用指令函數

到目前爲止,我想這

.directive('upDown', function() { 
    return function(scope, elem) { 
     elem.bind('mouseenter', function() { 
     scope.$broadcast('setPos'); 
     }); 
    }; 
    }) 

這是父指令,它看看我的元素,並tryes上懸停廣播發送到子指令。

.directive('contentTooltip', function($window) { 
    return { 
     restrict: 'C', 
     require: '^updown', 
     link: function(scope, elem) { 

     var calculatePos = function() { 
      var scrollTop = this.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; 
      var windowHeight = $window.innerHeight; 
      var elementOffset = elem.offset().top; 
      var elementHeight = elem[0].offsetHeight; 
      console.log('scrollTop = ' + scrollTop + ' & windowHeight = ' + windowHeight + ' & elementOffset = ' + elementOffset + ' & elementHeight = ' + elementHeight); 
      if (scrollTop + windowHeight < elementOffset + elementHeight) { 
      elem.addClass('icon-bottom'); 
      } 
      else { 
      elem.removeClass('icon-bottom'); 
      } 
     }; 

     scope.$on('setPos', function() { 
      alert('abc'); 
     }); 
     } 
    }; 
    }) 

這是我想接收廣播子指令,但它不工作:(

是否有任何其他方式從父指令訪問子指令?

謝謝你在前進,丹尼爾。

回答

0

你總是可以通過元素的DOM引用訪問任何元素的範圍的角度。你的情況,試試這個,

angular.element(".content-tooltip").scope();