我正在使用"controller as" syntax,我将每个控制器放在一个单独的文件中,包含在IIFE中,正如John Papa AngularJS Style Guide中所建议的那样。
有没有办法从子控制器 访问在父控制器范围内声明的属性?
我可以通过{{parent.variableOfParent}}
在视图中访问它们,但不知道如何从子控制器的JS中执行此操作。
P.S。为样式指南创建标签可能会很好,因为有很多关于它的问题。
答案 0 :(得分:11)
你本质上是在谈论在控制器之间共享数据。那么根据我[以及其他人也是如此;)],最好的方法是使用服务..
创建服务。
在两个控制器中注入服务,并将服务引用保存在控制器的范围内。
- 醇>
您现在可以访问视图和控制器中的数据。
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>