Angularjs 角度控制中的控制器代码组织

Angularjs 角度控制中的控制器代码组织,angularjs,Angularjs,所以,我正在进行我的第一个主要项目。我有一个控制器正在做大量的腿部工作,它已经达到了需要数千行JavaScript的程度 我想以某种方式打破这一点,但我似乎在任何地方都找不到可靠的例子。代码主要由用于对对象进行计算的函数组成,因此指令和模块似乎不是正确的答案,但我可能错了 你们是如何在大型项目中组织代码的?我是应该接受它,还是有一种合理的方法将其拆分为易于扫描的文件?我建议至少将其中一些对象及其相关计算放入服务中,然后将服务注入控制器中。有关封装某些数据并提供访问/操作该数据的方法的服务示例,请

所以,我正在进行我的第一个主要项目。我有一个控制器正在做大量的腿部工作,它已经达到了需要数千行JavaScript的程度

我想以某种方式打破这一点,但我似乎在任何地方都找不到可靠的例子。代码主要由用于对对象进行计算的函数组成,因此指令和模块似乎不是正确的答案,但我可能错了


你们是如何在大型项目中组织代码的?我是应该接受它,还是有一种合理的方法将其拆分为易于扫描的文件?

我建议至少将其中一些对象及其相关计算放入服务中,然后将服务注入控制器中。有关封装某些数据并提供访问/操作该数据的方法的服务示例,请参见

查看是否可以将控制器拆分为多个控制器,每个视图一个控制器。视图可以与页面一样大,也可以只是页面上的某个块/块


引用我最近在谷歌集团看到的一篇帖子:“我更喜欢将angular控制器视为我视图中愚蠢的API/Config,将所有繁重的工作留给服务。”——

当你在控制器中时,有几件事你需要问问自己

  • 您是否在控制器中执行任何DOM操作?这是一个明确的否定。永远不要这样做。它总是属于指令部门

  • 您是否在控制器中编写任何业务逻辑?这也是否定的。在大多数情况下,您的业务逻辑应该存在于服务中。那是个合适的地方

  • 现在,看看你的控制器。它没有这两样东西,还是超过1000行?这是极不可能的,但是即使它在某种程度上发生,那么考虑把你的控制器分解成更小的控制器。必须根据视图断开控制器


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

    我通常创建一个Util工厂(现在在Angular而不是services中似乎是这样),并让它作为一组方法返回任何共享逻辑


    +1 AngularJS文档声明控制器应“仅包含单个视图所需的业务逻辑”。但我发现,一旦某些数据需要在两个控制器或两个视图之间共享,最好将数据(以及操作数据的方法)放入服务中。因此,我认为我更喜欢您的建议--首先将业务逻辑放到服务中,然后在多个视图或控制器需要时做好准备。谢谢。只是分享一下,这可能会给你一些想法。我实际上是在将$scope变量从控制器传递到服务,它工作得很好,因为在服务中我们引用了$scope.x,但它看起来很难看,我的团队中没有人特别喜欢这种模式,包括我自己:/