>

ng-click 속성이있는 버튼이 있습니다. ng-click 속성을 제거하면 리스너가 지속됩니다. ng-click 속성을 제거 할 때 이벤트 리스너를 제거하려면 어떻게해야합니까?

angular.module('testApp', ['ng'])
  .directive('testDir', testDir)
  .controller('testCtrl', testCtrl);
function testDir() {
  return {
    compile: (elem, attrs) => {
      // Remove ng-click attribute
      elem.removeAttr('ng-click');
    }
  };
}
function testCtrl($scope) {
  $scope.count = 0;
  $scope.handleClick = function() {
    $scope.count++;
  }
}

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="testApp">
  <div ng-controller="testCtrl">
    <button test-dir ng-click="handleClick()">Click Me</button>
    <p>
      Count: {{count}}
    </p>
  </div>
</div>

  • 답변 # 1

    형제 지시문을 제거하려면 형제 형 지시문없이 요소를 다시 컴파일하고 요소를 교체하십시오.

    angular.module('testApp').directive('testDir', function($compile) {
      return {
        link: (scope,elem, attrs) => {
          // Remove ng-click attribute
          attrs.$set('ngClick');
          // Prevent infinite recursive re-compile
          // Remove test-dir attribute
          attrs.$set('testDir');
          //Change button text
          elem.text("New Click Me")
          //re-compile
          var newLinkFn = $compile(elem);
          //replace
          newLinkFn(scope, function transclude(clone) {
              elem.replaceWith(clone);
          });
        }
      };
    });
    
    

  • 이전 replace - 큰 XML 파일에서 텍스트 분리
  • 다음 javascript - 약속과 혼동 한 다음 기능