source

매개 변수가 있는 지시어에서 컨트롤러 함수 호출

manysource 2023. 11. 1. 22:26

매개 변수가 있는 지시어에서 컨트롤러 함수 호출

지시문은 일부 매개변수를 사용하여 컨트롤러에서 함수를 호출하는 방법은 무엇입니까?

저는 범위에 변수 myVar를 부여하고자 합니다.$apply(attrs)(할 일);

HTML:

<div ng-app="component">
  <div ng-controller="ctrl">
    <span ng-repeat="i in myarray">
     <span  customattr  whattodo="addVal">{{i}}</span>
    </span>
  </div>

컨트롤러 JS:

   function ctrl($scope) {
      $scope.myarray = [1];
      $scope.addVal = function (value) {
          $scope.myarray.push(value);
      }
   }

지시 JS:

angular.module('component', []).directive('customattr', function () {
  return {
      restrict: 'A',
      link: function (scope, element, attrs) {
          var myVar = 5;
          scope.$apply(attrs.whattodo);
      } 
  }; 
}); 

작업 방법 중 하나는 다음과 같습니다.

이 속성을 스코프에 함수 유형이 있는 스코프 모델로 바인딩해야 합니다.다른 (지시)소프가 필요할 때 실행할 수 있습니다.

HTML

<body ng-controller="MainCtrl">
  Value: {{value}}!

  <button customattr whattodo="addValue">Add</button>
</body>

JS

angular.module('component', [])

.controller('MainCtrl', function($scope) {
  $scope.value = 1;

  $scope.addValue = function(val){
    alert(val);
    $scope.value = val;
  }
});

.directive('customattr', function () {
  return {
      restrict: 'A',
      scope: {
          whattodo: "=" // or ' someOtherScopeName: "=whattodo" '
      },
      link: function (scope, element, attrs) {
          var myVar = 5;
          scope.whattodo(myVar); // or ' scope.someOtherScopeName(myVar) '
      } 
  }; 
});

여기 플렁커의 코드가 있습니다.

부터 AngularJS: 지시사항

= 또는 =attr - 로컬 스코프 속성과 속성 값을 통해 정의된 이름의 상위 스코프 속성 간에 양방향 바인딩을 설정합니다.특성 이름을 지정하지 않으면 특성 이름이 로컬 이름과 동일한 것으로 가정됩니다.지정된 범위 및 위젯 정의: {localModel:'=myAttr'}: 위젯 범위 속성 localModel은 상위 범위에 상위 모델의 값을 반영합니다.parentModel의 모든 변경 사항은 localModel에 반영되고 localModel의 모든 변경 사항은 parentModel에 반영됩니다.

html로

whattodo="addVal(value)"

지시에 따라

scope.$apply(function(s){
    s.whattodo({value : myVar});
});

분리된 범위에서 & 기호를 사용하는 것은 어떨까요?

<body ng-controller="MainCtrl">
  Value: {{value}}!
  <button customattr add-val="addValue(value)">Add</button>
</body>

컨트롤러에서:

   function ctrl($scope) {
      $scope.myarray = [1];
      $scope.addValue = function (value) {
          $scope.myarray.push(value);
      }
   }

그리고 지시사항:

angular.module('component', []).directive('customattr', function () {
  return {
      restrict: 'A',
      scope: {
          addVal: "&"
      },
      controller: function ($scope) {
          var myVar = 5;
             // To execute addVal in controller with 'value' param
          $scope.addVal({value: value}) 
      } 
  }; 
}); 

언급URL : https://stackoverflow.com/questions/16135711/call-a-controller-function-from-directive-with-parameters