假设我有几个表单,每个表单都有自己的控制器,看起来像这样
<div ng-controller="MyController1 as ctrl">
<label>Some label </label>
</div>
<div ng-controller="MyController2 as ctrl">
<label>Some label </label>
</div>
我有一个全局控制器,可以获取有关表单名称的信息。现在我想找到每个表单的控制器。例如,如果在我的全局控制器函数中,我得到第一个表单的名称,我怎么能发现它的控制器是MyController1?这甚至可能吗?
答案 0 :(得分:1)
可以从另一个控制器调用控制器。但是,我相信您尝试解决的问题是其他地方:您应用的架构。
理想情况下,您的应用应该做出反应&#39;改变国家。国家应该保持在一个地方(也称为“真正的单一来源”),即。一项服务。然后,您可以根据需要与多个控制器共享该服务状态。
您可以直接从控制器更新服务状态,也可以通过调用服务本身的方法。
请看下面的例子。我希望能有所启发。
干杯!
angular.module('app', [])
.service('MyService', function(){
var self = this;
self.state = {
name: 'John'
};
self.changeNameFromService = function() {
self.state.name = 'Peter';
}
})
.controller('Ctrl1', function($scope, MyService){
$scope.state = MyService.state;
$scope.changeName = function(){
// update the state of the scope, which is shared with other controllers by storing the state in a service
$scope.state.name = 'Mary';
}
})
.controller('Ctrl2', function($scope, MyService){
$scope.state = MyService.state;
// call a method defined in service
$scope.changeName = MyService.changeNameFromService;
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="Ctrl1">
Ctrl1: {{state.name}}
<button ng-click="changeName()">Change name!</button>
</div>
<div ng-controller="Ctrl2">
Ctrl2: {{state.name}}
<button ng-click="changeName()">Change name from service!</button>
</div>
</div>
&#13;