Ng-click по-прежнему срабатывает, когда div (ng) отключен
Проблема в том, что ng-click
работает над таким событием, если cancelTicket === false
он по-прежнему запускает ng-click
. Как я могу остановить это?
<div class="btn-block save-changes padding-10" ng-class="{'gray':cancelTicket===false,'secondary-button':cancelTicket===true}" ng-click="CancelTicket(ticketPin)" ng-disabled="cancelTicket===false" style="display: table;">
<div class="button-container padding3" ng-class="{'pointer':cancelTicket===true}">
<button-spinner promise="cancelPromise"></button-spinner>
<div style="display: inline-block !important;"> @Translator.Translate("CANCEL") </div>
</div>
</div>
Ответы
Ответ 1
Событие запускается, даже если div
отключен.
Вы можете избежать этого, используя ленивую оценку выражений типа isDisabled || action()
, поэтому действие не будет вызываться, если isDisabled
- true
.
В вашем случае это будет:
ng-click="cancelTicket === false || CancelTicket(ticketPin)"
Ответ 2
Вы должны поменять тег DIV на тег кнопки.
Это работает для меня.
Ответ 3
Вы можете отключить события кликов, когда элемент с ng-click
равен disabled
.
JQuery
$('*[ng-click]').on('click',function(event) {
var $el = $(event.target);
if($el.attr('disabled')) {
event.stopPropagation();
}
});
Выполнение этого на всех элементах DOM может привести к нежелательным результатам. Кроме того, вам нужно будет запустить вышеуказанное на любом новом HTML, обновленном в DOM.
Вместо этого мы можем изменять только кнопки для работы, как ожидалось.
Angular:
angular.module('app').directive('button',function() {
return {
restrict: 'E',
link: function(scope,el) {
var $el = angular.element(el);
$el.bind('click', function(event) {
if($el.attr('disabled')) {
event.stopImmediatePropagation();
}
});
}
}
});
Я бы не сделал выше на элементах div
, поскольку это было бы тяжело. Вместо этого измените свой подход, чтобы элементы button
использовались только для интерактивных взаимодействий. Затем вы можете их стиль выглядеть как другие элементы div
.
Ответ 4
<a class="btn btn-danger btn-xs" ng-click="vm.handleRemove(device)" ng-disabled="status === 1">Delete</a>
Измените тег на тег кнопки, затем OK
<button class="btn btn-danger btn-xs" ng-click="vm.handleRemove(device)" ng-disabled="status === 1">Delete</button>
Ответ 5
Мое решение состояло в том, чтобы использовать html-директиву с атрибутом, используемым вместо ng-click, чтобы
<html-tag-directive new-click="ctrl.functionToCall()" disabled="ctrl.disabled" >
и директива определена следующим образом:
1) шаблон:
<button type="button"
ng-disabled="disabled" ng-click="onClick()">
</button>
2) контроллер:
angular.module('module')
.directive('htmlTagDirective',function() {
return {
restrict:'E',
templateUrl:'template.html',
scope:{
disabled:'=',
click: '&'
},
link:function(scope,element){
scope.onClick = function() {
if (!(scope.disabled)) {
scope.newClick();
}
};
}
};
});