2015-04-20 3 views
0

Я хотел бы создать директиву, которая привязывается к событию «click» на кнопке и предотвращает обстрел ng-click, если выполнено условие.Как предотвратить ng-click от стрельбы

Я знаю, что могу справиться с этим в самой директиве ng-click, например.

ng-click="vm.form.$valid && vm.savePost(vm.post)" 

Но мои требования немного сложнее, чем это.

Я создал директиву, а не привязывался к событию нажатия кнопки и звонил e.preventDefault(), но это не остановило ng-click от стрельбы.

+0

Обычно я создаю пользовательскую функцию «sumbit()» для выполнения дополнительных проверок на «ng-click», а затем для функции «ng-disable». – RevanProdigalKnight

+0

ну, есть 100% путь - косвенный просто сохранить ngClick attr в переменную, а затем установить ngClick на пустое значение, а затем привязать новую функцию к клику - если условие встретило запущенную сохраненную функцию. Не красивое решение thow ( –

ответ

-1

Предотвращение использования по умолчанию используется для предотвращения нормального действия. Например, не идет в цель или кнопка не отправляется и т. Д.

ng-click и onclick не являются действиями по умолчанию, и вы не можете предотвратить его с помощью preventDefault.

Вы должны использовать функцию в ng-click, чтобы выполнить условия перед действием.

+0

Ofc, в общем, вы можете предотвратить ng-click. –

+0

@PetrAveryanov вы можете предотвратить событие onclick с stopPropagation. – Kristiyan

1

Возможно, сначала будет инициирована директива ngClick. В этом случае вы можете попробовать играть с установкой приоритета:

(function (module) { 
    var myDirective = function() { 
     return { 
      restrict: 'A', 
      scope: true, 
      priority: 1000, 
      ........ 
     }; 
    }; 
    module.directive("myDirective", myDirective); 
}(angular.module("module"))); 

Из официальной документации compile:

приоритета

Когда есть несколько директив определенных на одном элементе DOM, иногда необходимо указать порядок, в котором применяются директивы . Приоритет используется для сортировки директив перед вызовом функций компиляции .

+0

Я пробовал это, но он по-прежнему не мешает обработчику ng-click. –

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