2017-11-03 9 views
0

特定のリンクを無効にしようとしています。それらは私たちのnavbarのサードパーティのコンポーネントの中にありますので、元のHTMLを変更するだけではなく、コントローラからng-clickを削除したいのです。私は要素を見つけて更新することができましたが、ブラウザの要素を調べても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

だけでなく、あなたがしかし、それを行うべきではありません.....

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

"醜いハック"を行う必要があります。 角度はいくつかの順序でイベントをバインドし、後でそれをアンバインドする必要があるので、setTimeoutを取り除く方法を見つけるのが少し良くなるようにします。

まだ、それは醜いハックです。あなたはそれをより良くすることができます。おそらく、あなたの「クローズドソースコンポーネント」などを「飾る」可能性があります。

+0

私はそのことについて知りませんでした。私のコードは実際にはsetTimeoutにラップされていましたが、それを私のフィドルに含めるのを忘れました。はい、私はそのhackishを理解しています、私はちょうどライブラリを変更することを避けようとしていた(角度ウィザード)カスタマイズされたバージョンにつながる。 –

関連する問題