2015-03-22 3 views
0

У меня есть следующий код, где я пытаюсь переключить первое вхождение класса. Проблема в том, что это не работает, и я понятия не имею, почему нет.угловая директива переключает класс

(function() { 
'use strict'; 

angular.module('someApp') 

.directive('eventButton', function() { 
    return { 
     restrict: 'E', 
     scope: { 
      eventItemDisplayed: '@' 
     }, 
     transclude: true, 
     replace: false, 
     template: '<button class="btn btn-default" ng-click="toggleEvent()">{{text}}</button>', 
     link: function ($scope, element, attrs) { 
      $scope.eventItemDisplayed = false; 
      $scope.text = 'Show' 
      $scope.toggleEvent = function() { 
       element.find('event-details:first').toggleClass('hide-event'); 
       $scope.eventItemDisplayed = ($scope.eventItemDisplayed) ? false : true; 
       if ($scope.eventItemDisplayed) { 
        $scope.text = 'Show'; 
       } else { 
        $scope.text = 'Hide'; 
       } 
      } 
     } 
    } 
}); 
})(); 

HTML, выглядит следующим образом:

<event-button></event-button> 
<div class="event-details hide-event"> 

Если я использую

element.next().toggleClass('hide-element') 

Затем он работает отлично, т.е. он добавляет класс к элементу, как и ожидалось. Я подозреваю, что это потому, что next() возвращает элемент, тогда как find() возвращает селектор, представляющий класс?

+0

Какая цель вы здесь? Я спрашиваю, потому что похоже, что вы хотите ng-class, а не пользовательскую директиву. –

+0

У меня есть неупорядоченный список с переменными элементами, разбитыми на разделы. Только один раздел должен иметь класс, который переключается. В верхней части блока разделов есть кнопка в каждом элементе. Когда кнопка нажата, она применяет класс к средней части. – rilester

+0

см. Мой обновленный ответ @rilester –

ответ

0

поскольку класс event-details оленья кожа лежит внутри (не в своих детях) элемент директивы вы не можете найти его с находкой()

Следующими работают как следующие родственный элемент директивы

element.next() будет доставит вас к вам <div class="event-details hide-event"> as it next sibling of <event-button></event-button>

+0

doh - спасибо! Я этого не заметил. – rilester

+0

мое удовольствие, вы можете принять его в качестве ответа, если бы вам помогли :) –

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