我正在阅读应用程序的源代码,内容如下:
angular.module('graffio', [
'graffio.signupController',
'graffio.loginController',
'graffio.mainController',
'ui.router'
])
我有很多问题!这么多困惑......
答案 0 :(得分:2)
使用Angular,您可以根据需要将尽可能多的代码分组到模块中。您可以将模块组合在一起,就像您正在查看的应用程序的作者一样。最终模块将包含所有依赖的模块以及自己的模块中的所有服务,配置块,路由,控制器,指令,过滤器等。
本作者选择将每个控制器放入自己的模块中。这就是主模块需要依赖于每个模块的原因。在我看来,这看起来有点矫枉过正,但它已经完成了,所有你需要做的就是理解它,不同意它。
回答你的其他问题:
当您的代码首次运行时,将声明所有模块,并填充指令,路由,控制器,服务等。什么都没用过。只要运行上面的代码,其他模块已经被声明,那么一切都很好(这可以通过构建过程完成,例如Grunt任务)。
然后,当document.ready
事件发生时,Angular会在您的HTML中查找ng-app
指令,该指令指出要加载哪个模块作为您的应用程序。然后它做它所谓的" bootstrap"该模块的过程。
因为这位作者已将每个控制器放在自己的模块中。如果您将所需的所有控制器放入一个模块中,那么您就不需要像那样声明它们。
排序。它类似于你要求依赖名称然后使用它。
与require
不同的是,您通常无法修改在运行时为给定依赖项检索的值。使用依赖项注入,如果您愿意,可以在运行时交换或修改依赖项(在应用程序正常启动之前,并使用它们将依赖项注入代码中)。
这非常适合测试,因此您可以使用模拟(假)版本的依赖项进行测试,而不是使用普通版本。想想一个服务,它调用从服务器获取一些数据并返回一个promise。您可以创建一个不会调用服务器的服务的模拟版本,只需立即返回一些测试数据。这使您的单元测试速度很快,并且意味着您不需要运行Web服务器来使其工作。