如何防止元素的单击事件由angular绑定?

时间:2016-10-22 07:14:43

标签: angularjs angularjs-directive

我有一个像这样的元素

<a class='btn' ng-click="alert('clicked')"></a>

在js

$scope.alert=(item)=>{alert(item)};

我测试过使用过ng-disabled但是没有用。 这是我的HTML this is my html 这是我的指示 this is my directive

我的项目中有很多元素,所以我想写一个像ng-disable这样的指令如何编写它?

4 个答案:

答案 0 :(得分:1)

将$ event对象传递给函数,你可以这样做,

<a class='btn' ng-click="alert($event,clicked)"></a>

和控制器

$scope.alert = function ($event,clicked) {
  if (you want to stop) {
    $event.stopPropagation();
  } 
};

答案 1 :(得分:0)

&#13;
&#13;
var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
  $scope.alert=(item)=>{alert(item)}
  
  $scope.click = false
  $scope.click_two = true
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js"></script>
  <body ng-app="myApp">
    <div ng-controller="MyCtrl">
   <a style=" color: red" ng-click="!click||alert('Test')">Click on this and this will not alert</a>   <br> <br> 
   <a style=" color: blue" ng-click="!click_two||alert('Test')">Click on this and this  Will alert</a>    
</div>
  </body>
&#13;
&#13;
&#13;

当click的值为true时,将调用该函数,否则将不会调用

请点击两个锚标记以找出差异

在你的控制器中,

$scope.click = false;

Here is the fiddle

答案 2 :(得分:0)

不要在ng-disabled指令中使用插值。

<!--ERRONEOUS -->
<button ng-click="clicks=clicks+1" ng-disabled="{{checked}}">Button</button>

<!--CORRECT -->
<button ng-click="clicks=clicks+1" ng-disabled="checked">Button</button>

使用插值(双花括号)将布尔值转换为字符串。字符串&#34; false&#34;是真的。这是一个JavaScript的怪癖。 不要在ng-disabled指令中使用插值。

DEMO on PLNKR

答案 3 :(得分:0)

我认为这是解决问题的方法,谢谢大家帮我解决问题〜

.directive('a', function() {
return {
    restrict: "E",
    replace: true,
    scope: {

    },
    link: function(scope, elem, attr) {
        if (attr['ngDisabled']) {
            elem.unbind('click')
        }
    }
}

})