Angular.js中每个控制器的单独文件

时间:2015-07-03 11:53:33

标签: javascript angularjs

我希望拥有<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app ng-init="PayoutEnabled = true"> <a href="#" ng-click="PayoutEnabled = !PayoutEnabled"> {{PayoutEnabled ? 'Disable' : 'Enable'}} the below button</a> <br> <br> <input class="save-changes" type="submit" value="PAYOUT" ng-disabled="PayoutEnabled == false" /> </div>模块和主控制器。然后是另一个控制器,它们存在另一个文件。

主要模块:

Angular

这是另一个文件中的另一个控制器:

var app = angular.module("main", []);
app.controller("mainCtrl", function ($scope) {
  $scope.method1 = function (name) {
  }
}

我加载这样的文件:

var app = angular.module("main");//without []
app.controller("textCtrl", function ($scope) {
   $scope.method1(); //it works and i call method1 from mainCtrl(separate file)
});

我的问题是,在第二个控制器里面我可以调用主控制器内的方法,但我不能从主控制器调用第二个控制器内的方法。

所有结构都在运作,但这个问题困扰着我。

最后,我希望每个控制器都有单独的文件,这些文件都存在于同一个模块中,并且可以在两个文件中共享$ scope和其他变量。

另一种方法是使用服务,但问题是在主控制器中我必须从第二个控制器注入服务名称,有时我没有加载第二个控制器并注入该名称会引发错误。

我需要一个好的结构。

2 个答案:

答案 0 :(得分:0)

好像你有子父控制器,比如,

<div ng-controller="mainCtrl">
    <div ng-controller="textCtrl">

    </div>
</div>

然后textCtrl可以调用父控制器mainCtrl函数,也可以访问父变量。和子控制器属性对父控制器不可见。

单独文件中的两个控制器无关紧要,因为所有控制器都通过var app链接。

要在控制器之间进行通信,有很多方法可以参考post

使用service&amp; emitting an event

答案 1 :(得分:0)

可以使用两个或多个控制器之间的服务共享数据。如果你想要相同的范围,你需要在$ rootScope中有数据。

您在这里说的另一个问题可以通过首先加载定义了角度应用程序的js文件然后加载其他文件来解决。在其他文件中,您不需要重新定义角度应用程序(angular.module),如上所述。