将单个Angular Controller拆分为多个JS文件

时间:2015-04-23 14:59:39

标签: javascript angularjs knockout.js

我正在尝试使用Angularjs为我们的金融客户创建一个应用程序。他们需要整个应用程序在一个页面中。我说服他们至少使用标签。但实际问题是应用程序有近2000个字段,其中一半是根据输入和数据库中的一些数字计算的。

我使用很少的控制器隔离了应用程序。但是在给出所有计算的情况下,每个控制器仍然会很棒。

  1. 有没有办法将单个Controller拆分成多个JS文件?
  2. 我们使用KnockoutJS为同一客户开发了类似的应用程序。使用KO的可观察量和计算特征相当容易。或者与KO呆在一起是否更好?想象在控制器之间进行所有计算似乎非常困难。
  3. 请建议。

2 个答案:

答案 0 :(得分:4)

角度设计不好,但很容易被误用。事实上,Angular没有为模型或继承提出任何建议(你自己使用JS原型,POJO,以及extendcopy用于mixins)并不是这样。一点帮助。

如果您拥有使用OOP语言的现代MVC框架的背景,那么您可能熟悉瘦控制器,胖模型和#39;概念。在Angular案例中,它是瘦控制器,胖服务' (毕竟,它不是MVC,而是MVW框架)。

如果您要将某些功能分离到单独的对象(文件?)中,那么它就可以随时service(很可能是factory)。将Angular服务视为适合DI模式的常用对象(模型,实用程序类,异步服务等)。

看看Angular在过去几年中的良好实践是如何发展的,这是非常有趣的。其中一个是将控制器用于它们发光的唯一事物 - 从服务获取数据并将其放入范围,并使用$scope.$...函数,它有助于避免scope soup

另一个recent conception(受网络组件影响)我喜欢替换控制器(ng-controller本身就是一个指令,只提供控制器,因此名称)指令。后者可以提供更高级别的封装(通过隔离范围)和控制器互操作(使用require)。

我花了一些时间来弄清楚,但如果你不得不与Angular斗争,你可能会做错事。

答案 1 :(得分:3)

简短的回答是。您的控制器必须定义为单个功能。

但是,您应该将控制器中的逻辑分解为单独的服务。事实上,控制器应该具有非常的逻辑。您需要与其他控制器和指令共享的所有数据都应存储在您创建的服务中。单独的指令和控制器将使用服务来更新获取所需的值。

另请注意,如果控制器中有任何操作DOM的内容,则所有逻辑都应该在指令中。