Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将单个角度控制器拆分为多个JS文件_Javascript_Angularjs_Knockout.js - Fatal编程技术网

Javascript 将单个角度控制器拆分为多个JS文件

Javascript 将单个角度控制器拆分为多个JS文件,javascript,angularjs,knockout.js,Javascript,Angularjs,Knockout.js,我正在尝试用Angularjs为我们的金融客户创建一个应用程序。他们需要在一个页面中完成整个应用程序。我正在说服他们至少使用标签。但实际问题是,该应用程序几乎有2000个字段,其中一半是根据输入和数据库中的一些数字计算的 我使用了几个控制器来隔离应用程序。但考虑到所有的计算,每个控制器仍然是巨大的 有没有办法将单个控制器拆分为多个JS文件 我们使用KnockoutJS为同一个客户端开发了类似的应用程序。这对于KO的可观测和计算特征来说相当容易。还是和柯呆在一起更好?想象跨控制器进行所有计算似乎非

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

我使用了几个控制器来隔离应用程序。但考虑到所有的计算,每个控制器仍然是巨大的

  • 有没有办法将单个控制器拆分为多个JS文件
  • 我们使用KnockoutJS为同一个客户端开发了类似的应用程序。这对于KO的可观测和计算特征来说相当容易。还是和柯呆在一起更好?想象跨控制器进行所有计算似乎非常困难
  • 请建议。

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

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


    还要注意的是,如果控制器中有任何操作DOM的东西,那么所有这些逻辑都应该在一个指令中。

    Angular在设计上并不坏,但它很容易被误用。Angular对模型或继承没有任何建议(您可以自己使用JS原型、POJO和
    extend
    copy
    进行混合),这一事实根本没有帮助

    如果你有面向对象语言的现代MVC框架的背景,你可能熟悉“瘦控制器,胖模型”的概念。在这种情况下,它是“瘦控制器,胖服务”(毕竟它不是MVC,而是MVW框架)

    如果您要将一些函数分离到单独的对象(文件?),那么它就可以运行了(很可能是
    工厂
    )。将Angular服务视为适合DI模式的常用对象(模型、实用程序类、异步服务等等)

    看到过去几年中良好实践的发展是非常有趣的。其中一种方法是将控制器用于其唯一的用途—从服务获取数据并将其放入范围,使用
    $scope.$…
    函数,这有助于避免

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


    我花了一些时间才弄明白,但如果你不得不与Angular抗争,你可能是做错了什么。

    我从未与Angular合作过,但如果你喜欢Knockout,并且它适合你的架构,也许你会发现你并不清楚自己到底需要什么,但是,也许你可以使用服务和工厂来分离一些逻辑进行计算,具有可重用性的好处我同意Daniele的观点,你也可以使用指令来进行可重用的类似代码的计算。@Mark我现在已经结婚了,所以对我来说太晚了,但是Durandal看起来不错,其他人可能想看看“如果你不得不与棱角做斗争,你可能做错了。”??:-)@Mawg非常正确。事实上,这适用于任何过度工程化的框架。很高兴您看到humo(u)r:-)我将按照您的建议,将大量控制器代码移动到服务(+1)中