无法从指令调用父控制器方法

时间:2016-02-18 12:18:42

标签: angularjs angularjs-directive angularjs-controller

我已经看到关于此问题的manymanymanymany问题,但由于某种原因,我仍然可以'将我的指令中的ng-click绑定到父控制器上的方法。我很确定我的范围隔离和方法参数传递正确但到目前为止没有运气。我的JS的粗略简化(这个应用程序非常庞大)看起来像这样:

angular.module('myApp', []);

angular.module('myApp').directive('myCustomDirective', customDirective);

function customDirective() {
  return {
    restrict: 'E',
    scope: {
      myCallback: '&myCallback'
    }
    template: '<div><h3>My directive</h3><p>I am item {{itemIndex}}</p><button ng-click="myCallback({itemIndex: itemIndex})">Click to call back</button></div>'
  }
}

angular.module('myApp').controller('myController', myController);

function myController() {
  var vm = this;
  vm.selectedIndex = -1;

  vm.items = [0, 1, 2, 3, 4];

  vm.callbackMethod = function(itemIndex) {
    vm.selectedIndex = itemIndex;
  }
}

和类似简化的标记看起来像这样:

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

  <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular.js"></script>
    <script src="script.js"></script>
  </head>

  <body>
    <div ng-controller="myController as test">
      <p>Selected item: {{test.selectedIndex}}</p>
      <my-custom-directive my-callback="test.callbackMethod" ng-repeat="item in test.items" ng-init="itemIndex = $index"></my-custom-directive>
    </div>
  </body>

</html>

我在这里不知所措,因为我已经关注了这个主题的所有SO帖子和博客,但仍然没有。只是为了让事情变得更糟,我为说明这个问题所做的Plunk也不起作用($injector:nomod) - 如果有人能发现原因,那么奖励积分! ; - )

2 个答案:

答案 0 :(得分:2)

您应该使用参数定义方法,而不是将其引用到指令元素。

my-callback="test.callbackMethod(itemIndex)" 

也可以通过在隔离范围内添加当前元素索引来将其传递给指令。

scope: {
  myCallback: '&myCallback',
  itemIndex: '='
},

Demo Here

Related answer

答案 1 :(得分:1)

我在你的指令中添加了一个额外的属性并删除了ng-init。

 <my-custom-directive my-callback="test.callbackMethod($index)" ng-repeat="item in test.items track by $index" theindex="$index"></my-custom-directive>

Example