source

여러 인수로 함수를 바인딩하는 AngularJS 디렉티브

ittop 2023. 3. 23. 23:11
반응형

여러 인수로 함수를 바인딩하는 AngularJS 디렉티브

명령어에 콜백 함수와 컨트롤러에 정의된 함수를 바인딩하는 데 문제가 있습니다.코드는 다음과 같습니다.

내 컨트롤러:

$scope.handleDrop = function ( elementId, file ) {
    console.log( 'handleDrop called' );
}

그럼 내 지시사항:

.directive( 'myDirective', function () {
    return {
      scope: {
        onDrop: '&'
      },
      link: function(scope, elem, attrs) {
        var myFile, elemId = [...]

        scope.onDrop(elemId, myFile);
      }
    } );

그리고 내 html 페이지:

<my-directive on-drop="handleDrop"></my-directive>

위의 코드를 사용할 수 없습니다.다양한 튜토리얼에서 읽은 내용으로는 HTML 페이지에서 인수를 지정해야 한다고 알고 있습니다.

최소화를 지속할 수 있는 대체 방법

html을 그대로 둡니다.

<my-directive on-drop="handleDrop"></my-directive>

콜을 다음으로 변경합니다.

scope.onDrop()('123','125')

다음에 추가 개폐 괄호를 붙입니다.onDrop그러면 함수의 코드를 삽입하는 대신 함수가 인스턴스화됩니다.

왜 더 좋은가

  1. 에서 파라미터 이름 변경handleDrop()definition(또는 올바르게 처리한 경우에는 더 추가)은 html.much DRYer의 각 지시 주입을 변경하지 않습니다.

  2. @TrueWill의 제안대로라면 다른 솔루션은 최소화를 유지하지 못할 것이라고 확신합니다.이렇게 하면 코드는 최대한의 유연성을 유지하며 이름에 구애받지 않습니다.

또 다른 개인적인 이유는 오브젝트 구문입니다.그러면 코드를 더 많이 쓸 수 있게 됩니다.

functionName({xName: x, yName: y}) // (and adding the function signature in every directive call)

와는 반대로

functionName()(x,y) // (zero maintenance to your html)

나는 여기서 이 훌륭한 해결책을 찾았다.

코드에 작은 오류가 하나 있습니다. 아래 코드를 사용해 보십시오. 그러면 잘 될 것입니다.

<!doctype html>
<html ng-app="test">
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js"></script>

  </head>
 <body ng-controller="test" >    


<!-- tabs -->
<div my-directive on-drop="handleDrop(elementId,file)"></div>

 <script>
     var app = angular.module('test', []);

     app.directive('myDirective', function () {
         return {
             scope: {
                 onDrop: '&'
             },
             link: function (scope, elem, attrs) {
                 var elementId = 123;
                 var file = 124;
                 scope.onDrop({elementId:'123',file:'125'});

             }
         }
     });

     app.controller('test', function ($scope) {
         alert("inside test");
         $scope.handleDrop = function (elementId, file) {
             alert(file);
         }
     });

   </script>
</body>


</html>

언급URL : https://stackoverflow.com/questions/18973507/angularjs-directive-binding-a-function-with-multiple-arguments

반응형