在angular中,如何在另一个模块

时间:2016-05-17 19:28:28

标签: angularjs

现在我正在努力寻找一种简单的方法来解决这个问题,但是我正在处理一些非常古老的代码,我可以做很少的事情来重新安排,而且我现在有一个控制器< / p>

angular.module('a.module').controller('SomeController'...

和一个定义为

的指令
angular.module('b.module', ['a.module'])
angular.module('b.module').directive('aDirective', () => {
  return: {   
    controller: (scope) => {....},
    link: (scope, elem, attrs) {...}
  }
});

从模块b。中的指令的link函数中,我想访问SomeController及其函数。我没有运气就尝试了$指令服务,并且不确定我可以对定义了控制器的指令做很多事情。

1 个答案:

答案 0 :(得分:0)

根据您的DOM结构以及您尝试访问/传递的确切内容,如果您的指令是绑定到控制器的元素的子节点,则可以选择使用隔离范围。您可以使用隔离范围修饰符“@”,“=”或“&amp;”将控制器中的方法和/或数据提供给您的指令,如下所示:

angular.module('a.module').controller('SomeController', [
    '$scope',

    function ($scope) {
      $scope.text = "This is my text";

      $scope.func = function() {
        alert("Called from a.module");
      }
    }
]);

angular.module('b.module').directive('aDirective', function() {
  return {
    scope: {
      text: "@",
      func: "&"
    },
    template: '<div ng-click="func()">{{ dir }}</div>',
    link: function (scope, element, attrs) {
      scope.dir = scope.text;
    }
  }
})

和DOM:

<div ng-controller="SomeController">
  <a-directive func="func()" text="{{ text }}"></a-directive>
</div>

以下是Plunkr示例:http://plnkr.co/edit/kGicc8h79DGn1QvmjJzg

但是,只有当你试图给你的指令一些特定的行为时,才会谨慎使用这种方法。如果您的控制器中有业务逻辑可以/应该由其他控制器或指令使用,请不要将其保留在控制器中。相反,将这些功能提取到服务中并将服务注入指令/控制器。