2014-12-17 3 views
1

Я сделал angularjs директиву, как показано ниже:прохождение переменной сфера из директивы ссылки

angular.module('myApp') 
.driective('myDirective', function(){ 
return { 
    templateUrl: 'directive.html', 
     restrict: 'E', 
     scope: { 
     'dirObj': '=object' 
     }, 
     link: function (scope, element, attrs) { 
     scope.message = "View Message"; 

     element.bind('mouseenter', function(){ 
      scope.overState = true; 
      console.log('enter'); 
     }); 

     element.bind('mouseleave', function(){ 
      scope.overState = false; 
      console.log('leave'); 
     }); 

     } 
}; 
}); 

и внутри directive.html:

<h1>{{ message }}</h1> 
<div ng-show="overState">This text doesn't appear!!!</div> 

Вот живой код на plunkr

Проблема в том, что область внутри element.bin не устанавливает значение переменной «overState», кто-то может объяснить, почему это происходит Как исправить это.

+0

ли 'driective' опечатка в вашем вопросе? И где вы добавили 'myDirective' в свой шаблон? – putvande

+0

Я добавил my-директиву в файл индекса в модуле, что я спрашиваю о области, scope.message отображается, но scope.overState пуст всегда –

ответ

1

Вы должны использовать $scope.$apply:

scope.$apply(function() { 
    scope.overState = true; 
}); 

Угловые оберток большую часть своих встроенных директив автоматически, поэтому он будет обновляться через переваривать петли, но если вы свяжете свои собственные события (т.е. mouseenter и mouseleave) вас Вам нужно будет выкинуть петлю дайджеста.

Updated Plnkr


Обновление на основе комментариев ниже

Вы также можете использовать встроенный в угловых директивах ng-mouseenter и ng-mouseleave, и тогда не нужно будет беспокоиться о оценке углового выражение себя.

<div class="directive-area" 
    ng-mouseleave="overState = false" 
    ng-mouseenter="overState = true"> 
    <h1>{{ message }}</h1> 
    <div ng-show="overState">Test Text</div> 
</div> 

Built-in Directives Plnkr

+0

thanx, который решил проблему, но я все еще не убежден в решение, я думаю, что есть лучший способ сделать это. –

+0

Другое, что вы можете сделать, это использовать 'ng-mouseenter' и' ng-mouseleave', потому что они встроены в угловые директивы. В конечном итоге они делают то же самое. Если вам не нравится какое-либо решение, удачи в поиске! Вот пример этого: http://plnkr.co/edit/1NIdBmenKEAC2UYoIopP –

+0

Также у меня есть несколько divs, подобных этому, на разных страницах, при первом из которых он работал нормально, но когда я перешел на вторую страницу и навел указатель на div, я получил сообщение об ошибке: Ошибка: [$ rootScope: inprog] $ apply уже выполняется –

Смежные вопросы