Переключить два класса с AngularJS / jqLite по клику

Я не хочу получать анимацию slideIn / slideOut, переключая классы slideInRight и slideOutRight на элемент ul.

Я пробовал по-разному, но он работает только с одним className.

Как я могу добавить класс slideInRight для первого и класс slideOutRight при втором щелчке на моем элементе ul с помощью раскрывающегося меню класса?

Я попробовал это так:

angular.element('.dropdown-toggle').on('click', function(){
    angular.element('ul.dropdown-menu').toggleClass('slideOutRight slideInRight');
});

Что я делаю неправильно?

Надеюсь, вы можете помочь.


ОБНОВИТЬ:

Вот Plunker текущего состояния моего кода. Таким образом, работает только анимация slideInRight. Если я нажму кнопку еще раз, ul исчезнет без анимации slideOutRight.

В чем дело?

2 ответа

Вы можете попробовать использовать Angular's ng-class?

Я новичок в угловой, но то, как я это сделал, было так:

<ul class="dropdown-menu" ng-class="ulOpen ? 'slideOutRight' : 'slideInRight'">

и JS

angular.element('.dropdown-toggle').on('click', function(){
    if($(this).hasClass('.slideOutRight')) {
        ulOpen = true;
    } else {
        ulOpen = false;
    }
});

Добавьте ulOpen к вашему контроллеру как переменную области видимости

контроллер

$scope.ulOpen = false;

HTML

Тогда вам следует положиться на директиву angularjs ng-click, чтобы установить значение ulOpen:

<button class="dropdown-toggle" type="button" ng-click="ulOpen=!ulOpen">Toggle Class</button>

И ng-класс для переключения класса на основе значения ulOpen:

<ul class="dropdown-menu" ng-class="slideOutRight: ulOpen, slideInRight: !ulOpen">

В общем, я бы порекомендовал по возможности найти решение чисто angularjs. Я нахожу очень мало случаев, когда нет встроенной угловой директивы, которая могла бы обрабатывать то, что я в противном случае попытался бы сделать в jquery.

Другие вопросы по тегам