【发布时间】:2013-07-21 13:42:50
【问题描述】:
我刚开始使用 AngularJS,所以我不是专家。
我有一个 div 代表我的 html 视图的正确区域。在那个 div 我有一个控制器,即
<div class="rightContainer" ng-controller="rightContainerCtrl">...</div>
在那个 div 里面我有一个表格、一个搜索区域等。那个 div 里面的每个区域都有自己的控制器,它看起来像这样:
<div class="rightContainer" ng-controller="rightContainerCtrl">
...
<div class="search" ng-controller="searchCtrl">...</div>
...
<div class="table" ng-controller="tableCtrl">...</div>
</div>
例如,搜索区域有自己的控制器,它是 rightContainerCtrl 的子级,因为它需要更改父级 (rightContainerCtrl) 中的一些内容,但 rightContainer div 正在增长,现在它很大,并且包含多个嵌套控制器。
我认为在这种情况下使用这种嵌套控制器是不好的,因为所有嵌套控制器共享父范围,并不是所有控制器都需要访问所有父范围变量,所有控制器也是 rightContainerCtrl 的“囚徒”,因此它们与父控制器高度耦合。
它看起来像一个God object 反模式(在这种情况下是上帝控制器),所以我认为我可以重构我的代码以消除 rightContainerCtrl 控制器并改用服务(就像在 @ 987654322@),然后控制器将使用该服务,而不是共享范围变量。
但由于我不是 AngularJs 专家,我不确定我是否正确,或者离开这个父控制器是否更好,也许我遗漏了一些东西,所以我的问题是
什么时候使用嵌套控制器(嵌套范围)更好,什么时候在 angularjs 中使用服务更好?
【问题讨论】:
标签: angularjs anti-patterns god-object