假设一个页面的左侧面板有一些可供选择的项目,而右侧有一个“购物车”面板,那么有两个控制器是好的:左侧面板为1,而左侧面板为1右小组?
实际上,为了共享数据并能够使用来自两个控制器的数据,我们可能会为左侧面板设置<div>
,然后立即为“购物车”启动另一个<div>
(嵌套2个控制器),以便我们可以“混合和匹配”itemController.foo
和cartController.bar
(使用“控制器为”语法)。
但是在JavaScript代码中,如果我们需要共享数据,则需要工厂服务或使用$rootScope.sharedData
对象。那么,为什么不使用1个控制器而不是2个,这样数据共享不是问题?但是,假设我们使用2个控制器,如果用户是“公司协调员”,则页面有一个特殊情况,这样他或她可以每周进行多次购买(而不是一般用户每周限购1次) ),所以我们需要在页面中进行一些特殊处理,我们是否应该实际创建另一个名为CompanyCoordinatorController
的控制器?
O'Reilly的书AngularJS Up and Running,2014,p。 18:
AngularJS控制器几乎总是直接链接到视图或HTML。我们永远不会有一个未在UI中使用的控制器(那种业务逻辑会进入服务中)。
所以有两个控制器似乎有意义吗?我们可以说,它是页面上的一个大视图,因此我们只使用1个控制器吗?这是非模块化的,而不是坚持“关注点分离”(产品列表与购物车)?问题是,我们何时应该在AngularJS页面中创建一个控制器?
答案 0 :(得分:0)
取决于。
说真的,这是一个设计决策,你必须让自己,你的团队,以及那些在你离开后负责维护代码的人。组件必须是模块化的吗?听起来对你来说,你已经对此深思熟虑,但不确定要做出的选择。
这不会是一个正确的答案,你在这里得到的任何答案(包括我的答案)都是有偏见的,主观的,无论如何都可能不适合你。我的建议是尝试一种方式,看看它是否有效。如果没有,重构它。在我个人看来,我更喜欢通过pub-sub服务相互通信的模块化组件。但同样,这可能对您当前的项目不起作用。在做出决定时考虑可行性,成本和可维护性。
干杯!