Angular中的控制器代码组织

jba*_*ket 28 angularjs

所以,我正处于Angular的第一个重大项目之中.我有一个控制器正在做大量的工作,它达到了成千上万行JavaScript的程度.

我想以某种方式解决这个问题,但我似乎无法在任何地方找到一个可靠的例子.代码主要由用于对对象进行计算的函数组成,因此指令和模块似乎不是正确的答案,但我可能在那里错了.

你们是如何在大型Angular项目中组织代码的?我应该把它搞砸一下,还是有一种理智的方法将其拆分成易于扫描的文件?

Mar*_*cok 26

我建议将至少一些对象及其相关计算放入服务中,然后将服务注入控制器.有关封装某些数据并提供访问/操作该数据的方法的服务示例,请参阅Sticky Notes第1部分博客条目.

看看你是否可以将你的控制器拆分成多个控制器,每个控制器一个.视图可以与页面一样大,也可以只是页面上的一些块/块.

引用我最近看到的谷歌小组的帖子:"我更倾向于将角度控制器视为我的观点的愚蠢api/configs,并将所有繁重的工作留给服务." - 参考


gan*_*raj 23

当你在控制器中时,你需要问自己一些事情.

  1. 你在控制器中进行任何DOM操作吗?这是肯定的NO.不要那样做.它始终属于指令部门.

  2. 您在控制器中编写任何业务逻辑吗?这也是一个NO.在大多数情况下,您的业务逻辑应存在于服务中.这是适合它的地方.

现在,看看你的控制器.它没有这两件事并且仍然大于1000行吗?这是不太可能的,但即使它以某种方式发生,然后考虑将您的控制器分解为更小的控制器.必须根据视图完成控制器的中断.

总而言之,您的控制器只是在HTML中粘贴业务逻辑和视图的地方.从技术上讲,它应该不包含除这些胶水之外的任何东西.

  • +1 AngularJS文档声明控制器应"仅包含单个视图所需的业务逻辑",http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller.但我发现只要一些数据需要在两个控制器或两个视图之间共享,最好将数据(以及操作它的方法)放入服务中.所以,我认为我更喜欢你的推荐 - 将业务逻辑放入服务中,然后在多个视图或控制器需要它时就准备就绪.谢谢. (8认同)