Задать вопрос

Выполнение директивы?

Есть директива, которая переключает класс:
myApp.directive('toggleClass', function() {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {
            element.bind('click', function() {
                element.toggleClass(attrs.toggleClass);
            });
        }
    };
});

Как сделать так, чтобы при клике на кнопку с классом .add, директива выполнялось не для этой кнопки, а для элемента с классом .hide-elements ?
<div class="hide-elements"></div>
    <button class="add">+</button>
  • Вопрос задан
  • 230 просмотров
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
используйте ng-click и привязку к состоянию, не работайте с DOM сами.

Вся суть ангуляра в декларативности вью, то есть никаких попыток самостоятельно что-то поменять в DOM.

<div class="hide-elements" ng-class="{'your-class-name': vm.some.condition}"></div>
    <button class="add" ng-click="vm.add()">+</button>


в контроллере меняете состояние компонента и все хорошо.

Поясню идею, почему это хорошо. Если у вашего приложения нет привязки к DOM и он оперирует примитивами, который предоставляет вам ангуляр (ngHide/ngShow/ngClass/ngRepeat и т.д.) то вам не нужно париться вообще о том как формируется представление. Уменьшается возможность побочных эффектов, отсутствует необходимость покрывать код тестами (ну или волноваться что что-то сломается просто так), достаточно проверить что приложение входит в необходимое состояние а ангуляр вам уже гарантирует что представление под это состояние подстроится так, как вы это задекларировали в шаблонах.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы