使用'this'从子控制器访问父控制器的数据

时间:2014-11-07 20:24:41

标签: angularjs

我在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>

1 个答案:

答案 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();
    }
    

    希望这有帮助。