如何从指令访问ng-controller?

时间:2015-12-15 16:32:26

标签: angularjs angularjs-directive

我已经编写了自己的指令,我想在父指令上调用一个方法。我试过通过在我的指令中添加require:'ngController'来做到这一点。但是返回的控制器只是一个空对象。我正在运行1.4.8。

<html>
      <head>
      </head>
      <body>
         <button id="test1" onclick="OnSave()">Save</button>
         <iframe id="test2" src="smth">//button inside that will fire OnSave event</iframe>
      </body>
    <script>
     function OnSave() {
      if ($("#test2").length)
        {
            alert("i see iframe");           
        }
      else
        {
          //some code that will call Iframe via ajax
        }
      }
    </script>
    </html>

更新:我的错误是我在控制器范围添加了一个方法,而不是直接将它添加到控制器中。

<div ng-controller="myController">
  <div my-directive></div>
</div>

app.directive('myDirective', function() {
  return  {
    restrict: 'A',
    scope: false,
    require: '^ngController',
    link: function (scope, $element, attrs, controller) {
      //controller is empty object..
    };
  }
});

2 个答案:

答案 0 :(得分:1)

如果您的指令没有独立的范围,并且您不需要scope,则可以通过ngController致电家长控制器。

angular.module('app', [])
  .controller('controller', function($scope) {
    $scope.greet = function() {
      return 'hi'
    };
  })
  .directive('testDirective', function() {
    return {
      restrict: 'E',
      template: '<h1>{{ greet() }}</h1>'
    };
  });

输出:

hi

Plnkr:http://plnkr.co/edit/uGXC5i1GjphcZCPDytDG?p=preview

答案 1 :(得分:0)

该函数需要在指令范围内可用。因此,如果您的指令在控制器的范围内,那么它是:

scope.fn();