programing

AngularJS - 지시 ngClick을 재정의하는 방법

newstyles 2023. 3. 20. 21:43

AngularJS - 지시 ngClick을 재정의하는 방법

ng-click 명령어를 덮어쓰고 싶습니다.ng-click을 실행할 때마다 $rootscope가 변경됩니다.어떻게 하는 거야?

모든 디렉티브는 AngularJS 내의 특별한 서비스이며 디렉티브를 포함하여 AngularJS 내의 모든 서비스를 재정의하거나 수정할 수 있습니다.

예를 들어 기본 제공 제거ngClick

angular.module('yourmodule',[]).config(function($provide){
    $provide.decorator('ngClickDirective', ['$delegate', function($delegate) {
        //$delegate is array of all ng-click directive
        //in this case first one is angular buildin ng-click
        //so we remove it.
        $delegate.shift();
        return $delegate;
    }]);
});

각도에서는 동일한 이름에 대한 여러 지시어를 지원하므로 사용자가 직접 등록할 수 있습니다.ngClick지시.

angular.module('yourmodule',[]).directive('ngClick',function (){
  return {
    restrict : 'A',
    replace : false,
    link : function(scope,el,attrs){
      el.bind('click',function(e){
        alert('do you feeling lucky');
      });
    }
  }
});

http://plnkr.co/edit/U2nlcA?p=preview를 확인해 주세요.각도가 있는 빌트인을 제거한 샘플을 작성했습니다.ng-click커스터마이즈한 것을 추가합니다.ngClick

Angular를 재정의할 수 없습니다.JS 기본 제공 지침.그러나 동일한 이름을 가진 여러 디렉티브를 정의하고 동일한 요소에 대해 이들 디렉티브를 실행할 수 있습니다.적절한 할당을 통해priority지시문에 대한 지시문을 기본 제공 지시문 앞 또는 뒤에 실행할지 제어할 수 있습니다.

플런커는 어떻게 조립하는지를 보여줍니다.ng-click삽입 전에 실행되는 지시어ng-click코드도 아래에 나와 있습니다.링크를 클릭하면 커스텀이ng-click먼저 실행한 후 기본 제공ng-click한다.

index.displaces를 표시합니다.

<!DOCTYPE html>
<html ng-app="app">

  <head>
    <script data-require="jquery@1.9.0" data-semver="1.9.0" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.9.0/jquery.js"></script>
    <script data-require="angular.js@1.0.7" data-semver="1.0.7" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js"></script>
    <script src="script.js"></script>
  </head>

  <body ng-controller="MyCtrl">
    <a ng-click="alert()">Click me</a>
  </body>

</html>

script.discripts.discripts: 스크립트

angular.module('app', [])
  .directive('ngClick', function($rootScope) {
      return {
        restrict: 'A',
        priority: 100, // give it higher priority than built-in ng-click
        link: function(scope, element, attr) {
          element.bind('click', function() {
            // do something with $rootScope here, as your question asks for that
            alert('overridden');
          })
        }
      }
  })
  .controller('MyCtrl', function($scope) {
    $scope.alert = function() {
      alert('built-in!')
    }
  })

언급URL : https://stackoverflow.com/questions/18421732/angularjs-how-to-override-directive-ngclick