我在stackoverflow上发现了一篇非常有用的文章:
AngularJS access parent scope from child controller
当父控制器是全局控制器时,提供的解决方案可以访问父级的范围。
所以:
(function() {
angular.module.controller('s').controller('ParentCtrl', function () {
var vm = this;
vm.cities = ["NY", "Amsterdam", "Barcelona"];
}
}());
(function() {
angular.module.controller('s').controller('ChildCtrl', function () {
var vm = this;
ParentCtrl.apply(vm, arguments);
vm.parentCitiesByScope = $scope.pc.cities;
vm.parentCities = vm.cities;
} }());
如果我们为每个控制器放置一个IIFE,您如何访问ParentCtrl的cities属性?请注意,此ParentCtrl不再与子控制器位于同一范围内,因此我们无法调用apply函数。
如果我将控制器放在单独的文件中,我该如何访问父级的范围?
将此作为html:
<div ng-app ng-controller="ParentCtrl as pc">
<div ng-controller="ChildCtrl as cc">
<pre>{{cc.parentCities | json}}</pre>
<pre>{{pc.cities | json}}</pre>
</div>
答案 0 :(得分:0)
根据修改后的问题,我了解您希望跨多个独立控制器共享信息。如果这是你想要实现的目标,你可以使用其中任何一种。
$rootScope
分享信息。由于所有控制器范围都是从$rootScope
继承的,因此您可以使用此方法
但是,不建议在$rootScope
中共享方法/功能,您只应该放数据。样品服务
angular.module('myApp')
.service('MyService', function() {
var cities = ["NY", "Amsterdam", "Barcelona"];
this.getCities = function() {
return cities;
}
}
服务使用
angular.module('myApp')
.controller('MyController', function($scope, MyService) {
$scope.myCities = MyService.getCities();
}
希望这有帮助。