2014-10-29 48 views
0

我有一個簡單的指令,像這樣:Angularjs - 追加與NG-顯示ATTR元素指令

.directive("test", function($compile) { 
    var directive = {}; 
    directive.restrict = 'AE'; 
    directive.scope = { 
     options: '=testattr' 
    }; 
    directive.link = function(scope, element, attr) { 
     element.wrap('<div class="whatever"></div>'); 
     var el = angular.element('<div class="test" ng-show="showBar"></div>'); 
     $compile(el)(scope); 
     element.parent().append(el); 

     scope.isOverPanel = false; 
     scope.showBar = false; 
     element.on('mouseover', function(){ 
      console.log('mouseover'); 
      scope.isOverPanel = true; 
      scope.showBar = true; 
     }); 
     element.on('mouseleave', function(){ 
      console.log('mouseleave'); 
      scope.isOverPanel = false; 
      scope.showBar = false; 
     }); 
    }; 

    return directive; 
}); 

出於某種原因,在div只顯示了,當我點擊元素上,而不是在鼠標懸停。它也不會在mouseleave上消失。我可以在控制檯看到mouseover和mouseleave事件觸發。可能是什麼問題呢?

回答

1

這些都不是本土角事件,所以你需要範圍適用於這兩種情況下(鼠標離開/鼠標懸停)

element.on('mouseleave', function(){ 
      scope.$apply(function(){ 
       scope.isOverPanel = false; 
       scope.showBar = false; 
      }); 

     }); 

這是因爲你使用jQuery來註冊這些事件,並因此它們未知的角度和其消化週期。

您可以嘗試使用本地角度指令來執行鼠標事件。示例:https://docs.angularjs.org/api/ng/directive/ngMouseover

+0

哦!我想如果我使用jqLit​​e(不包括jQuery),它應該可以工作。我會嘗試ngMouseover指令,看看它是否有效。謝謝! – Andrew 2014-10-29 00:37:58

+0

無法讓它與之一起工作。 'element.wrap('

');'然後'scope.mouseOver = function(){...}'似乎不起作用。我在這裏錯過了什麼? – Andrew 2014-10-29 00:42:00

+0

你需要綁定中的()。這裏是一個例子http://stackoverflow.com/questions/22532656/ng-mouseover-and-leave-to-toggle-item-using-mouse-in-angularjs – TGH 2014-10-29 00:43:27

相關問題