无法从元素中删除ng-click

时间:2017-11-03 16:01:01

标签: angularjs angularjs-ng-click

我正在尝试禁用某些链接。它们位于导航栏中的第三方组件内,因此我不能只更改源HTML,因此我想从控制器中删除ng-click。我已经能够找到并更新元素但是ng-click事件仍在发生,即使检查浏览器中的元素显示它不再有ng-click?

HTML:

<div ng-app="myApp" ng-controller='myController'>
  <div id="myDIV">  
    <ul>
      <li><a ng-click='value=value+1'>click me to add value</a></li>
      <li>not a link</li>
    </ul>
  </div>
  <input ng-model="value" />

使用Javascript:

var app = angular.module('myApp', []);

app.controller('myController', ['$scope',
  function($scope) {
    $scope.value = 0;
    var items = document.getElementById("myDIV").getElementsByTagName("ul")[0].getElementsByTagName("li");
    _.each(items, function(item){
      var link = item.getElementsByTagName('a');
      if(link[0]){
        console.log('before: ',link[0]);
        var myElement = angular.element( link[0] );
        myElement.removeAttr('ng-click');
        console.log('after: ',myElement);
      }
    });
  }
]);

小提琴:http://jsfiddle.net/esoyke/s9gdxsc0/

1 个答案:

答案 0 :(得分:1)

你不应该这样做,但是......

setTimeout(function(){ 
  angular.element(link).unbind('click'); 
  console.log("unbind");
}, 100);

应该做&#34;丑陋的黑客&#34;。 为了更好地找到摆脱setTimeout的方法,因为angular以某种顺序绑定事件,之后你必须解除绑定。

不过,这是一个丑陋的黑客行为。你可以做得更好。也许有可能&#34;装饰&#34;你的&#34;闭源组件&#34;或者其他的东西。