首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从指令中访问ng-controller?

如何从指令中访问ng-controller?
EN

Stack Overflow用户
提问于 2015-12-16 00:32:26
回答 2查看 162关注 0票数 0

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

代码语言:javascript
复制
<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..
    };
  }
});

更新:我的错误在于我将一个方法添加到了控制器作用域,而我应该将它直接添加到控制器中。

代码语言:javascript
复制
app.controller('myController', function($scope) {
 $scope.myMethod = function() {}; //Not callable from controller passed to directive
 this.myMethod = function() {}; //IS callable from controller passed to directive
});
EN

回答 2

Stack Overflow用户

发布于 2015-12-16 00:46:02

如果您的指令没有独立的作用域,并且不需要ngController,则可以通过scope调用父控制器。

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

输出:

代码语言:javascript
复制
hi

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

票数 1
EN

Stack Overflow用户

发布于 2015-12-16 00:37:10

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

代码语言:javascript
复制
scope.fn();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34294528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档