如何在使用" controller As"时从子控制器访问父作用域。和IIFE?

时间:2014-12-01 11:44:42

标签: angularjs angularjs-scope

我正在使用"controller as" syntax,我将每个控制器放在一个单独的文件中,包含在IIFE中,正如John Papa AngularJS Style Guide中所建议的那样。

有没有办法从子控制器 访问在父控制器范围内声明的属性

我可以通过{{parent.variableOfParent}}在视图中访问它们,但不知道如何从子控制器的JS中执行此操作。

Plnkr

P.S。为样式指南创建标签可能会很好,因为有很多关于它的问题。

1 个答案:

答案 0 :(得分:11)

你本质上是在谈论在控制器之间共享数据。那么根据我[以及其他人也是如此;)],最好的方法是使用服务..

  
      
  1. 创建服务。

  2.   
  3. 在两个控制器中注入服务,并将服务引用保存在控制器的范围内。

  4.   
  5. 您现在可以访问视图和控制器中的数据。

  6.   
yourApp.service("sharedService", function() {
    this.data = "123";
})

yourApp.controller("parentController", function(sharedService) {
    $scope.sharedService = sharedService;
});

yourApp.controller("childController", function(sharedService) {
    $scope.sharedService = sharedService;
});

现在,您希望在两个控制器之间“共享”的任何内容都可以放在服务中。

此外,在html中,您可以使用相同的服务引用来访问数据:

e.g。

    <div ng-app='app' ng-controller='ParentCtrl as parent'>

      <div ng-controller='ChildCtrl as child'>
        {{parent.sharedService.data}}<br> <!-- both will print the same value -->
        {{child.sharedService.data}}<br> <!-- both will print the same value -->
      </div>
    </div>