我希望拥有<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和其他变量。
另一种方法是使用服务,但问题是在主控制器中我必须从第二个控制器注入服务名称,有时我没有加载第二个控制器并注入该名称会引发错误。
我需要一个好的结构。
答案 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),如上所述。