2017-11-03 4 views
0

특정 링크를 비활성화하려고합니다. 그것들은 네비게이션 바의 제 3 자 구성 요소 안에 있으므로 원본 HTML을 변경할 수 없으므로 대신 컨트롤러에서 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" /> 

자바 스크립트 :

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 이해, 난 그냥 사용자 정의 버전에 묶는 라이브러리 (각도 마법사)을 변경하지 않도록 노력했다. –

관련 문제