模块之间的角度依赖关系

时间:2015-03-02 22:52:36

标签: angularjs dependency-injection module bootstrapping

我在模块之间使用依赖注入时遇到问题。 我有一个模块,它实现了我需要在其他应用程序中使用的指令。

我在另一个应用声明中添加了此模块的依赖关系,如下所示:

angular.module('mainApp', ['ngRoute', 'directiveApp']);

然而,在applyApp.controller中实现的方法似乎从MainApp的页面中看不到,因为该指令无法从其控制器运行所需的方法。

我知道这有点令人困惑,所以我在这个plunker中举了一个例子,说明了我面临的问题。

1 个答案:

答案 0 :(得分:3)

当您将另一个模块注入自己的模块时,它实现的控制器和指令变得可用,但您需要正确使用它们。

您尝试做的方式是不可能的,您可以这样做: http://plnkr.co/edit/peHH226vxtkI48RFZ3Eq?p=preview

  <body ng-controller="MainCtrl">
    <h1>Value: {{name}}!</h1>
    <button ng-click="mainModule()">Call a function in the main module!</button>

    <div ng-controller="SubCtrl">
      {{name}}
      <button ng-click="dependentModule()">Call a function in the dependent module!</button>
    </div>
  </body>

但请注意,您有两个不同的$scopes,因此有两个不同的name变量。

这意味着您的dependentModule()功能属于您的SubCtrl,您只能在自己的$scope

内使用它

不建议这样做,但如果你真的需要,可以在自己的方法中使用其他控制器,然后复制结果:

http://plnkr.co/edit/ranK9n08NNVuSKIGX15G?p=preview

main.controller("MainCtrl", function($scope, $controller) {


  $scope.name = "Initial value";
  $scope.mainModule = function() {
    $scope.name = "a function in the same module";
  };

  $scope.bridgeFunction = function(){
    // Create a new scope
    var injectedScope = $scope.$new();

    // Use it on the other controller
    $controller('SubCtrl',{$scope : injectedScope });

    // Call the methdo on the controller
    testCtrl1ViewModel.dependentModule(); //And call the method on the newScope.

    // Copy the result from that scope into your own
    $scope.name = testCtrl1ViewModel.name;
  }

});

第三种选择是合并两个范围,虽然这可能会非常混乱,但有可能:

http://plnkr.co/edit/1NKStMuYy0e00dhuWKUD?p=preview

main.controller("MainCtrl", function($scope, $controller) {

  $scope.name = "Initial value";

  //This can get very messy, but it is possible to merge the two scopes:
  $controller('SubCtrl',{$scope : $scope });

  $scope.mainModule = function() {
    $scope.name = "a function in the same module";
  };

});

希望有所帮助